문제 출처 [큐] |
[SWEA] 5099. [파이썬 S/W 문제해결 기본] 6일차 - 피자 굽기 D3
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
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 |
[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 번호를 출력한다.
#1 4 #2 8 #3 6 |
풀이 코드
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
|
5099. [파이썬 S/W 문제해결 기본] 6일차 - 피자 굽기 D3
# 20.04.02
for tc in range(1,int(input())+1):
N, M = map(int, input().split())
cheese = list(map(int,input().split())) # 치즈량 (//2 계산되기)
# print(cheese)
pizza_num = [i for i in range(M)] # 피자번호 0번부터
# print(pizza_num)
queue = pizza_num[0:N] # 피자번호로 돌리기(화덕큐) (삭제,삽입)
# print(queue)
while len(queue) != 1: # 마지막 남은게 한 개가 될 때까지
if cheese[queue[0]] != 1: # 치즈 0 으로 안 한 것은...1//2한게 0인지아닌지
cheese[queue[0]] = cheese[queue[0]] // 2
queue.append(queue.pop(0)) # 화덕큐 앞에 있는게 뽑아 뒤로 이동하기
else: # 치즈량이 1이라면, //2 된게 => 어차피 0일테니, 바로 교체
queue.pop(0)
if N != M: # M개를 다 넣을 때까지
queue.append(pizza_num[N]) # pop한 자리에, 넣고 뒤로 돌린다 = 뒤로 바로 삽입
N += 1 # 다음넣을차례
print('#{} {}'.format(tc,queue[0] +1)) # 피자번호 +1번
|
도움
내짝궁...
해석
13번째줄 # 치즈 0 으로 안 한 것은 , 치즈 1 일때 1//2 한건 0이 되어 pop만 해야 하는데 또 안에서 if ==0인지아닌지 비교해서 처리할 코드쓰면 낭비니깐...
고통
구조를 다짜고 들어가야지... 무작정 이렇게 하다가 꼬였다. ㅠㅠㅠ 후 두개의 정보를 가지면
딕셔너리로 풀었는데, 리스트로 테스트 해보다 치즈가 모두 0인걸 어떻게 판단하지 하다...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 구조꼬임 실패
# 20.04.02
# 마지막피자....의 원래 번호를 어캐알지....
# 화덕크기 N, 피자개수 M
N, M = 3, 5 # map(int,input().split())
pizza = [7,2,6,5,3] # list(map(int,input().split()))
pizza = [[7,1],[2,2],[6,3],[5,4],[3,5]] # 1판 [[치즈,피자번호]]
q = [] #화덕
for _ in range(N):
q.append(pizza.pop(0)) # 인덱스번호로 팝
print(q)
print(pizza)
flag = 1
while flag: # 모두 [i][0]이 될 때까지
for i in range(N): # 0 1 2
q[i][0] = q[i][0]//2
print(q)
if q[i][0] == 0: # 치즈 다 녹음
if len(pizza): # 다른 피자 잇으면 넣기
q[i] = pizza.pop(0)
... 꼬임...
|
'코딩테스트 \파이썬\자바 > SWEA D3' 카테고리의 다른 글
[SWEA] 5110. [파이썬 S/W 문제해결 기본] 7일차 - 수열 합치기 D3 파이썬 (0) | 2020.04.11 |
---|---|
[SWEA] 5108. [파이썬 S/W 문제해결 기본] 7일차 - 숫자 추가 D3 파이썬 (0) | 2020.04.09 |
[SWEA][D3] 4676. 늘어지는 소리 만들기 D3 파이썬 (0) | 2020.03.11 |
[SWEA][D3] 1225.[S/W 문제해결 기본] 7일차 - 암호생성기 D3 파이썬 (0) | 2020.02.29 |
[SWEA][D3] 6485 . 삼성시의 버스 노선 (0) | 2020.02.26 |