본문 바로가기

알고리즘 (2020 : 08 : 10 ~ )/구현, 시뮬

[백준 / BOJ] 3213 피자

문제

출처 : www.acmicpc.net/problem/3213

 

3213번: 피자

첫째 줄에 친구의 수 N이 주어진다. (1 ≤ N ≤ 10,000) 다음 N개 줄에는 각 친구가 먹을 수 있는 피자의 양이 주어진다. 이 값은 항상 분수이며, 1/4, 1/2, 3/4중 하나이다.

www.acmicpc.net

상근이의 친구들은 피자를 먹는데, 무조건 1/4, 3/4, 1/2크기만큼 먹을수있다. 

이때, 상근이가 시켜야하는 최소한의 피자양을 구하는문제다.

(1/4 3/4 1/2 만큼의 조각을 나눠서 먹는것이 아닌, 한번에 먹어야한다 )

 

풀이

예제를 전부 더해보면 2가 나와서 2판만 시키면되는데, 출력은 3이나와서 뭔가했다...

알고보니 (번역본에는 안 나와있는데 본문에는 나와있음) 조각을 나눠서 먹으면 안되고 한번에 먹어야하는 조건이있었다.

(3/4를 먹을려면 무조건 3/4조각이 붙어있어야함)

 

각각 (1/2, 3/4, 1/4) 에 해당하는 덱을 3개 선언하고 해당 조각을 입력받을때마다 넣어준다.

(각각 deq1, deq2, deq3 이라 하자)

(num은 시켜야할 피자의 양이다.)

 

1. 1/4는 3/4와 합쳐져서 1이 된다.

deq2와 deq3을 한번씩 팝해주고 num++을 해준다

 

2. 1/4두개는 1/2와 합쳐져서 1이 된다.

deq2를 두번팝하고 deq1을 한번 팝해준후 num++을 해준다. 이때, deq2가 하나남았을때는 두번 팝할수없으므로, 한번만 팝하고 num++을 한후 종료한다.

 

3. 1/2는 1/2와 만나서 1이된다.

deq1을 두번팝하고 num++을 한다. 마찬가지로 deq1이 하나 남을경우가 있으므로, 이때는 한번만 팝하고 num++을 해준다.

 

남은 deq1 deq2 deq3을 계산해서 출력하면 정답이 나온다.

 

시간은 n이 최대 10000이므로 최대 10000번 돌고 끝난다.

 

소스코드

https://github.com/devxb/JJUNalgo/blob/master/3213%20%ED%94%BC%EC%9E%90/main.cpp

 

devxb/JJUNalgo

백준 알고리즘 소스코드🙃. Contribute to devxb/JJUNalgo development by creating an account on GitHub.

github.com