[Boj문제풀이]

[Boj/백준] 19638 Python

ki7348 2021. 9. 14. 17:29

문제출처: https://www.acmicpc.net/problem/19638

 

19638번: 센티와 마법의 뿅망치

마법의 뿅망치를 센티의 전략대로 이용하여 거인의 나라의 모든 거인이 센티보다 키가 작도록 할 수 있는 경우, 첫 번째 줄에 YES를 출력하고, 두 번째 줄에 마법의 뿅망치를 최소로 사용한 횟수

www.acmicpc.net

 

 

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