Post

[BOJ] 피자 굽기 - 1756 (G5)

[BOJ] 피자 굽기 - 1756 (G5)
시간 제한메모리 제한
2 초128 MB

문제

오븐은 원통 모양이며 깊이 D이다. 각 깊이마다 지름이 다르다. 반죽을 넣을 때 위에서부터 차례대로 넣는다. 반죽이 오븐보다 크면 해당 위치에 걸린다.

모든 반죽을 넣었을 때, 마지막 반죽이 들어간 깊이를 구하는 프로그램을 작성하시오.

풀이

구현 문제이다. 각 위치에서 그 위의 최소값을 미리 계산해둔다.

코드

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
import sys
input = sys.stdin.readline

D, N = map(int, input().split())
oven = list(map(int, input().split()))
doughs = list(map(int, input().split()))

min_oven = oven[0]
for i in range(1, D):
    min_oven = min(min_oven, oven[i])
    oven[i] = min(oven[i], min_oven)

oven_i = D - 1
dough_i = 0

while dough_i < N:
    if oven[oven_i] < doughs[dough_i]:
        # 못들어감
        oven_i -= 1
        if oven_i < 0:
            # 다 들어갈 수 없음
            print(0)
            break
    else:
        dough_i += 1
        oven_i -= 1

else:
    print(oven_i + 2)

시간 복잡도

O(D + N)

This post is licensed under CC BY 4.0 by the author.