문제출처: https://www.acmicpc.net/problem/19638
1. 문제 접근 방식
힙에 삽입을 한다. 단, 최대힙을 구하는 문제임으로 음수를 취한 후에 삽입한다.
heappop을 하고 만약 h보다 크다면 다시 넣고 break
만약 1이라면 다시 삽입
h보다 크다면 //2 연산을 해주고 삽입을 한다.
2. 내가 푼 코드
import sys
import heapq
n, h, t = map(int,sys.stdin.readline().split())
count = 0
heap = []
for _ in range(n):
heapq.heappush(heap,-int(sys.stdin.readline()))
for i in range(t):
a = heapq.heappop(heap)
if abs(a) < h:
heapq.heappush(heap,a)
break
elif abs(a) == 1:
heapq.heappush(heap,a)
else:
a = -(abs(a)//2)
heapq.heappush(heap,a)
count+=1
if abs(min(heap)) < h:
print('YES')
print(count)
else:
print('NO')
print(abs(heapq.heappop(heap)))
3. 결과 및 느낀점
경우를 나눌 때는 if ... if하지말고 확실하게 if elif else처리를 하자.
break문 전에 확실히 할 연산을 다 하고 break문을 쓰자.
'[Boj문제풀이]' 카테고리의 다른 글
[Boj/백준] 13975 Python (0) | 2021.09.16 |
---|---|
[Boj/백준] 19598 Python (0) | 2021.09.15 |
[Boj/백준] 15903 Python (0) | 2021.09.14 |
[Boj/백준] 1927 11279 11286 Python (0) | 2021.09.13 |
[Boj/백준] 5464 Python (0) | 2021.09.11 |