Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- merge-sort
- kruskal 알고리즘
- 탐욕 알고리즘
- binary search
- quick-sort
- prim 알고리즘
- 자료구조
- 프로세스
- 최소 비용 신장 트리
- 이진탐색트리
- 중위 표기법
- union-find
- 동적 계획법
- 이진 검색
- 완전 탐색
- 알고리즘
- divide and conquer
- disjoint-sets
- CPU scheduling
- 최단 경로 알고리즘
- 서로소 집합
- 후위 표기법
- deque
- 알고리즘 문제
- 3190번
- 트리
- BST
- 부분 집합
- 프로세스의 상태
- 다이나믹 프로그래밍
Archives
- Today
- Total
Dionysus
[알고리즘 문제 풀이🙄] 20551. 증가하는 사탕 수열 본문
📌 문제 요약
세 개의 상자가 나란히 있을 때 각 상자에 사탕을 A개, B개, C개 넣어두려 한다.
각 상자가 비어있지 않으면서 들어 있는 사탕의 개수가 순증가하도록 하려고 할 때, 이 조건을 맞추기 위해 넘치는 사탕을 세현이가 먹어 없앤다고 하면 최소 몇 개의 사탕을 먹어야 하는가?
(세 개의 자연수 A, B, C는 각각 1 이상 3000 이하의 값을 가진다.)
- 실행 시간: python 3초, java 2초
🤔 내가 생각한 로직
- A, B, C 순서로 사탕의 개수가 순증가해야 하므로, C부터 개수를 확인한다.
- 다음으로 B는 C보다 최소 1 이상 적은 개수의 사탕을 가지도록 사탕을 먹어 없앤다.
- 마지막으로 A는 B보다 최소 1 이상 적은 개수의 사탕을 가지도록 사탕을 먹어 없앤다.
😥 틀린 코드와 문제점
T = int(input())
for tc in range(1, T + 1):
candies = list(map(int, input().split()))
bf_cnt = candies[-1]
toEat = 0
for i in range(1, -1, -1):
if candies[i] >= bf_cnt:
toEat += candies[i] - bf_cnt + 1
candies[i] -= toEat
bf_cnt = candies[i]
if bf_cnt < 0:
toEat = -1
break
print(f'#{tc} {toEat}')
▷시간 초과가 문제였던 것 같다.
🤗 제출 후 pass한 코드
T = int(input())
for tc in range(1, T + 1):
A, B, C = map(int, input().split())
if C <= 2 or B <= 1:
print(f'#{tc} -1')
continue
totalEat = toEat = 0
if B >= C:
toEat = B - C + 1
B -= toEat
totalEat += toEat
if A >= B:
toEat = A - B + 1
A -= toEat
totalEat += toEat
print(f'#{tc} {totalEat}')
강사님 코드를 한번 훑어보고 작성한 코드이다.
🧐 참고할 코드
T = int(input())
for tc in range(1, T + 1):
A, B, C = map(int, input().split())
# A < B < C 구조로 만들 수 없는 케이스를 처리함
if B < 2 or C < 3:
print(f'#{tc} -1')
continue
eat = 0
if B >= C:
eat += B - (C - 1)
B = C - 1
if A >= B:
eat += A - (B - 1)
A = B - 1
print(f'#{tc} {eat}')
😎 앞으로의 개선 방향
굳이 생성하지 않아도 될 변수나 리스트를 만들지 않도록 설계하는 연습을 해야겠다. 그리고 완전탐색을 하더라도 간단히 비교가 가능한 것은 굳이 반복문으로 구현하지 않아도 됨을 알게되었다.
'CS 및 알고리즘 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[알고리즘 문제 풀이🙄] 백준 3190. 뱀 (gold 4) (1) | 2024.10.02 |
---|---|
[알고리즘 문제 풀이🙄] 백준 13335. 트럭 (silver 1) (0) | 2024.10.02 |
[알고리즘 문제 풀이🙄] 5656. 벽돌 깨기 (0) | 2024.09.09 |
[알고리즘 문제 풀이🙄] 1486. 장훈이의 높은 선반 (1) | 2024.09.06 |
[알고리즘 문제 풀이🙄] 1861. 정사각형 방 (0) | 2024.09.06 |