PS

백준 1756. 피자 굽기

tose33 2022. 6. 18. 22:33

https://www.acmicpc.net/problem/1756

 

1756번: 피자 굽기

월드피자 원주 지점에서 N개의 피자 반죽을 오븐에 넣고 구우려고 한다. 그런데, 월드피자에서 만드는 피자 반죽은 지름이 제각각이다. 그런가하면, 월드피자에서 사용하는 오븐의 모양도 몹시

www.acmicpc.net

 

처음에 생각의 방향을 잘못 잡아 좀 오래 걸렸다.

 

우선 오븐의 깊이 D와 피자의 수 N이 둘다 최대 30만개기 때문에 단순히 위에서 부터 피자를 떨어뜨려서 쌓는 방식으로는 O(N^2)으로 불가능하다.

 

나는 이 문제를 오븐의 위에서 부터 아래로 최소값을 기록하는 방식으로 풀었다.

예를들어 오븐이 다음과 같다면 

 

5

6

4

3

6

2

3

 

위에서 부터 아래로 내려가면서 현재 까지의 최소 지름을 기록하면 다음과 같다 

 

지름, 최소

5  5

6  5

4  4

3  3

6  3

2  2

3  2

 

이 최소값이 의미하는 것은 해당 오븐 칸 위로는 적어도 최소값 이상의 지름을 갖는다는 것이다. 

이제 피자를 순서대로 아래에서 부터 채워가면 된다.

 

피자가 다음과 같다면  : 3 2 5

 

우선 지름 3의 피자의 자리는, 오븐의 아래에서 부터 탐색하면 맨 아래는 최소지름이 2이기 때문에 맨 아래 오븐칸 위로 지름이 2인 오븐이 있고, 피자의 지름은 3이기 때문에 불가능하다.

즉 아래서 부터 탐색하면서 현재 피자의 지름 보다 크거나 같은 최소값을 갖는 지점이 해당 피자가 위치 하는 지점이다.