https://www.acmicpc.net/problem/2292
from sys import stdin
N = int(stdin.readline())
r = 1
a = 6
while r < N:
r += a
a += 6
print(a // 6)
이건 무조건 규칙 문제다 싶어서 열심히 규칙을 찾아봤다
1 을 둘러싼 둘레가 관건이었음
각 둘레마다 n+1 개의 방을 지나가며 이게 최소 개수가 된다
(1 도 하나의 방에 포함되므로 n+1)
첫번째 둘레 => 2 ~ 7 => 6개의 숫자
두번째 둘레 => 8 ~ 19 => 12개의 숫자
세번째 둘레 => 20 ~ 37 => 18개의 숫자
네번째 둘레 => 38 ~ 61 => 24개의 숫자
...로 각 둘레마다 6*n
개의 숫자를 가짐
따라서 6 의 배수 a 를 r 에 계속 더해가면서
N 이 어떤 둘레에 속하는지 판단하고 6 으로 나눈 몫 print
https://www.acmicpc.net/problem/1927
import heapq
from sys import stdin
N = int(stdin.readline())
heap = []
for i in range(N):
n = int(stdin.readline())
if n == 0:
if len(heap) > 0:
print(heapq.heappop(heap))
else:
print(0)
else:
heapq.heappush(heap, n)
min-heap 을 이용해서 문제 고대로 풀었다
n 이 0 일 때만 heap 에 값이 있는지 판단해서 pop & print / 없으면 print(0)
자연수면 heappush