5099. 피자 굽기
문제)
N개의 피자를 동시에 구울 수 있는 화덕이 있다. 피자는 치즈가 모두 녹으면 화덕에서 꺼내며, 치즈의 양은 피자마다 다르다.
1번부터 M번까지 M개의 피자를 순서대로 화덕에 넣을 때, 치즈의 양에 따라 녹는 시간이 다르기 때문에 꺼내지는 순서는 바뀔 수 있다.
주어진 조건에 따라 피자를 구울 때, 화덕에 가장 마지막까지 남아있는 피자 번호를 알아내는 프로그램을 작성하시오.
- 피자는 1번위치에서 넣거나 뺄 수 있다.
- 화덕 내부의 피자받침은 천천히 회전해서 1번에서 잠시 꺼내 치즈를 확인하고 다시 같은 자리에 넣을 수 있다.
- M개의 피자에 처음 뿌려진 치즈의 양이 주어지고, 화덕을 한 바퀴 돌 때 녹지않은 치즈의 양은 반으로 줄어든다. 이전 치즈의 양을 C라고 하면 다시 꺼냈을 때 C//2로 줄어든다.
- 치즈가 모두 녹아 0이 되면 화덕에서 꺼내고, 바로 그 자리에 남은 피자를 순서대로 넣는다.
[입력]
첫 줄에 테스트 케이스 개수 T가 주어진다. 1<=T<=50
다음 줄부터 테스트 케이스의 첫 줄에 화덕의 크기 N과 피자 개수 M이 주어지고, 다음 줄에 M개의 피자에 뿌려진 치즈의 양을 나타내는 Ci가 주어진다.
3<=N<=20, N<=M<=100, 1<=Ci<=20
[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 번호를 출력한다.
풀이)
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
|
from collections import deque
T = int(input())
for _ in range(T):
n, m = map(int, input().split())
# 넣을 피자
li = deque(map(int, input().split()))
# 화덕
queue = deque()
# 일단 화덕에 피자와 피자번호를 리스트화 해서 넣는다.
cnt = 1
while len(queue) != n:
queue.append([li.popleft(), cnt])
cnt += 1
# 이후 문제의 로직에 따라 구현
while queue:
a = queue.popleft()
if a[0] // 2 > 0:
queue.append([a[0] // 2, a[1]])
elif a[0] // 2 == 0:
if li:
queue.append([li.popleft(), cnt])
cnt += 1
print(f'#{_ + 1} {a[1]}')
|
cs |
문제 출처 : https://swexpertacademy.com/main/main.do
※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.
학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.
'Develop > Python + SWEA' 카테고리의 다른 글
[SW Expert Academy] 1226. 미로 1 (0) | 2022.03.15 |
---|---|
[SW Expert Academy] 5102. 노드의 거리 (0) | 2022.03.15 |
[SW Expert Academy] 5105. 미로의 거리 (0) | 2022.03.15 |
[SW Expert Academy] 5097. 회전 (0) | 2022.03.15 |
[SW Expert Academy] 12712. 파리퇴치3 (0) | 2022.02.28 |