코딩테스트/SWExpertAcademy

피자굽기 Python(SW Expert Academy)

멍토 2020. 3. 29.

난이도 : D3

문제번호 : 5099

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIoJqqfYDFAWg

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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

예시

입력 출력

3
3 5
7 2 6 5 3
5 10
5 9 3 9 9 2 5 8 7 1
5 10
20 4 5 7 3 15 2 1 2 2

#1 4
#2 8
#3 6

2. 문제풀이

문제를 꼼꼼히 다시 읽어보는 계기가 된 문제였다.

최대로 넣을 수 있는 크기가 있는데 문제를 대충 봐서 큐 전체를 돌리며 계산했다.

 

치즈양과 인덱스를 묶어서 리스트를 생성하고

화덕에 넣을 수 있는 양만큼의 리스트를 분리하고 남은 피자리스트를 가지고 있는다.

큐를 돌리면서 치즈의 양을 줄이고 치즈가 0이되면 남은 피자리스트에 있는 피자를 가져와 넣는다.

원소가 1개남을때까지 반복하며 남은 피자의 인덱스를 출력한다. 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#D3 5099 피자굽기
 
for t in range(1int(input()) + 1):
    #N개의 피자를 동시에 구울 수 있는 화덕
    #M개의 피자를 구워야 함
    N, M = map(int, input().split())
    temp = input().split()
    #인덱스랑 합쳐서 만들기
    pizza = [(i+1int(temp[i])) for i in range(M)]
    #화덕에 들어갈 피자
    pizzas = pizza[:N]
    #화덕에 못들어간 피자
    pizza = pizza[N:]
    #피자가 1개남을때까지 반복
    while len(pizzas) != 1:
        #피자를 꺼내서 치즈를 반절로 줄이고
        num, cheese = pizzas.pop(0)
        cheese //=2
        #치즈가 있다면 다시 넣는다.
        if cheese: pizzas.append((num, cheese))
        #치즈가 없다면 대기중인 피자를 넣어준다,
        else : 
            if pizza : pizzas.append(pizza.pop(0))
    print('#{} {}'.format(t, pizzas.pop()[0]))

댓글

💲 광고입니다.