728x90
반응형
SW Expert Academy SWEA 5099 피자 굽기 문제는 N개의 피자를 동시에 구울 수 있는 화덕에 M개의 피자를 순서대로 화덕에 넣어 구울 때, 가장 마지막까지 남아있는 피자 번호를 구하는 문제이다. 큐 queue, 데크 deque 자료구조에 관한 문제로 난이도는 D3다.
출처: https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIoJqqfYDFAWg
SW Expert Academy 5099 피자 굽기 문제 정보
자료구조 분류
- queue 큐, deque 데크
난이도
- D3
피자 굽기 문제 요약
- 1번부터 M번까지 M개의 피자를 N개의 피자를 동시에 구울 수 있는 화덕에 넣는다. (3≤N≤20, N≤M≤100)
- M개의 피자에 뿌려진 치즈의 양을 나타내는 Ci가 주어진다. (1≤Ci≤20)
- 주어진 조건에 따라 피자를 구울 때, 화덕에 가장 마지막까지 남아있는 피자 번호를 찾아 출력한다.
- 화덕 구조 - 출입구 ↔ 1 → 2 → 3 →... → N → 1
- 피자는 1번 위치에서 넣거나 뺄 수 있다.
- 화덕 내부의 피자 받침은 천천히 회전해서 1번에서 잠시 꺼내 치즈를 확인하고 다시 같은 자리에 넣을 수 있다.
- M개의 피자에 처음 뿌려진 치즈의 양이 주어지고, 화덕을 한 바퀴 돌 때 녹지 않은 치즈의 양은 반으로 줄어든다. 이전 치즈의 양을 C라고 하면 다시 꺼냈을 때 C//2로 줄어든다.
- 치즈가 모두 녹아 0이 되면 화덕에서 꺼내고, 바로 그 자리에 남은 피자를 순서대로 넣는다.
문제 풀이 과정
- deque 자료구조를 사용하기 위해 import 한다.
- 피자 번호와 치즈 양 튜플 객체를 원소로 갖는 deque와 화덕 deque를 생성한다.
- 화덕에 피자를 최대로 넣는다.
- 화덕에 피자가 1개 남을 때까지 5~7번 과정을 반복한다.
- 오븐이 비어있고 피자가 남았으면 오븐에 피자를 넣는다.
- 1번 위치의 피자를 잠시 꺼내고
- 1번 위치의 피자 치즈가 다 안 녹았으면 다시 넣는다.
- 테스트 케이스 번호, 마지막으로 남은 피자 번호를 출력한다.
코드 및 설명
- pizzas - (피자 번호, 치즈 양) 튜플 객체를 원소로 갖는 deque
- oven - 화덕에 들어 있는 피자 정보 (피자 번호, 치즈 양)
from collections import deque
for tc in range(int(input())):
ovenSize, pizzaNum = map(int, input().split())
pizzas = deque(enumerate(list(map(int, input().split())), 1))
oven = deque()
# 오븐에 피자 넣기
for i in range(ovenSize):
oven.append(pizzas.popleft()) # 피자 번호, 치즈
# 피자가 1개 남을 때 까지
while len(oven) > 1:
# 오븐이 비어있고 피자가 남았으면 오븐에 넣기
if len(oven) < ovenSize and pizzas:
oven.append(pizzas.popleft())
# 1번 위치의 피자 번호, 치즈 양
pizzaNumber, cheese = oven.popleft()
# 치즈가 다 녹았으면
if not cheese // 2:
continue
# 치즈가 다 녹지 않았으면 다시 넣기
else:
oven.append((pizzaNumber, cheese // 2))
print("#%d %d" % (tc + 1, oven.popleft()[0]))
피자 번호를 어떻게 알아내야 하나 고민했는데, 입력받을 때, enumerate()를 사용하여 데크에 함께 저장하면 된다.
SW Expert Academy SWEA 5099 피자 굽기 문제는 큐 queue, 데크 deque 활용 문제이며 파이썬으로 구현하였다. 난이도는 D3이다.
728x90
반응형
'Algorithm Problem Solving > SW Expert Academy' 카테고리의 다른 글
[Python] SWEA 5108 숫자 추가 (0) | 2021.08.09 |
---|---|
[Python] SWEA 5102 노드의 거리 (0) | 2021.08.09 |
[Python] SWEA 5097 회전 (0) | 2021.08.08 |
[Python] SWEA 4880 토너먼트 카드게임 (0) | 2021.08.05 |
[Python] SWEA 4874 Forth (0) | 2021.08.03 |
댓글