문제
N개의 피자를 동시에 구울 수 있는 화덕이 있다. 피자는 치즈가 모두 녹으면 화덕에서 꺼내며, 치즈의 양은 피자마다 다르다.
1번부터 M번까지 M개의 피자를 순서대로 화덕에 넣을 때, 치즈의 양에 따라 녹는 시간이 다르기 때문에 꺼내지는 순서는 바뀔 수 있다.
주어진 조건에 따라 피자를 구울 때, 화덕에 가장 마지막까지 남아있는 피자 번호를 알아내는 프로그램을 작성하시오.

- 피자는 1번위치에서 넣거나 뺄 수 있다.
- 화덕 내부의 피자받침은 천천히 회전해서 1번에서 잠시 꺼내 치즈를 확인하고 다시 같은 자리에 넣을 수 있다.
- M개의 피자에 처음 뿌려진 치즈의 양이 주어지고, 화덕을 한 바퀴 돌 때 녹지않은 치즈의 양은 반으로 줄어든다. 이전 치즈의 양을 C라고 하면 다시 꺼냈을 때 C//2로 줄어든다.
- 치즈가 모두 녹아 0이 되면 화덕에서 꺼내고, 바로 그 자리에 남은 피자를 순서대로 넣는다.
- 화덕 내부의 피자받침은 천천히 회전해서 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는 테스트 케이스 번호)를 출력한 뒤, 번호를 출력한다.
내가 쓴 코드
# 원형큐 이용
def isEmpty():
return front == rear
def isFull():
return (rear + 1) % (N + 1) == front
def enQueue(item):
global rear
if isFull():
pass
# print('Queue is full')
else:
rear = (rear + 1) % (N + 1)
Q[rear] = item
def deQueue():
global front
if isEmpty():
pass
# print('Queue is empty')
else:
front = (front + 1) % (N + 1)
return Q[front]
T = int(input())
for t in range(T):
N, M = map(int, input().split()) # N : 화덕 크기, M : 피자 개수
cheeze = list(map(int, input().split()))
Q = [0] * (N + 1) # 원형 큐 생성
front = rear = 0
for n in range(N): # 첫 화덕
enQueue(n) # 치즈 인덱스 돌리기
cur = N # 피자 인덱스 저장
while not isEmpty():
# 치즈 꺼내서 확인
idx = deQueue() # 치즈 인덱스 뽑아서 저장
cheeze[idx] //= 2
if cheeze[idx] > 0: # 치즈가 남아있으면
enQueue(idx)
elif cheeze[idx] == 0: # 치즈가 다 녹으면(0이 되면)
if cur <= (M-1):
enQueue(cur)
cur += 1
print(f'#{t+1} {idx+1}')
피잣집 오픈 못할 줄 알았는데,, 어제 강사님이 도와주신 덕분에 오픈할 수 있었다.!!! 치즈 인덱스를 어케 저장해서 어케 출력할지 감도 안잡혔는데, 생각보다 간단히 해결 가능한 문제였음. ^^ !
화덕(큐)에다가 나는 치즈 양을 넣었었는데, 그게 아니라 걍 치즈 리스트의 인덱스를 넣어 돌리는 것이었음 ~,,~
출력 결과
#1 4
#2 8
#3 6
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
| [BOJ #18258] 큐2 (0) | 2024.02.19 |
|---|---|
| [SWEA #11651] 큐 - 노드의 거리 (1) | 2024.02.16 |
| [BOJ #9506] 약수들의 합 (2) | 2024.02.15 |
| [BOJ #10828] 스택 (3) | 2024.02.15 |
| [SWEA #11649] 큐 - 회전 (0) | 2024.02.15 |