Tiny Bunny
본문 바로가기
Algorithm/Python

[SWEA #11650] 큐 - 피자굽기

by nowag 2024. 2. 16.

문제

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는 테스트 케이스 번호)를 출력한 뒤, 번호를 출력한다.

 

내가 쓴 코드

# 원형큐 이용
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