728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LsaaqDzYDFAXc
# 접근 방법
- 우선 제일 처음 빵이 만들어지기 전에 손님이 방문한다면 "Impossible" 출력과 동시에 끝내주었다.
- 또한 빵을 받아가는 사람 수가 처음 만든 빵의 개수보다 적다면 위의 조건 이후에 elif 조건문을 이용하여 "Possible" 출력을 해주며 끝내주었다.
- 이제 나머지 조건에 맞추어서 답을 내주면 되는데, 방문하는 사람을 "시간 초"로 표현하였기에 "시간"에 관점을 두고 풀이를 하였다.
- 빵을 만드는데 걸리는 시간을 누적해주며 빵의 개수만큼 "Queue" 구조를 이용하여 삭제시켜주었다.
- 만약, 빵을 받아가는 사람의 시간 초가 현재 누적시간보다 작다면 ! 받아갈 수 없다는 것을 이용하였다.
- ex) 60초 동안 10개의 빵을 만든다면 시간은 60*1, 60*2 ....
- 방문하는 사람의 시간초가 60, 60, 61, 61, 61, 70, 100, 101, 119, 119, 119라면 첫 사이클에 빵을 나눠주고 다음 빵을 받는 사람은 119초에 오는 손님이 된다.
- 하지만 60*2초에 다음 빵이 만들어 지므로 기다리게 된다
# 예약제
# N명, 0초 시작, M초에 K개
import sys
from collections import deque
sys.stdin = open('input.txt')
T = int(input())
for tc in range(1, T+1):
N, M, K = map(int, input().split())
arrive = list(map(int, input().split()))
# 기다리는 시간없이 붕어빵 제공가능 하면 possible, 아니라면 impossible
result = 0
# 시간 카운트
second = 1
# 붕어빵 주면서 q에서 빼준다.
arrive.sort()
# 첫사람이 기다리면 바로 종료
if arrive[0] < M:
print(f'#{tc} Impossible')
# 처음만들었을 때 전부 받아갈 수 있다면 종료
elif len(arrive) < K:
print(f'#{tc} Possible')
# 둘 다 아니라면 카운트 세주면서 본다.
else:
# 빵만드는 개수보다 작게 남았다면 종료해도된다.
while len(arrive) >= K and result == 0:
# 사람 수만큼 반복
for i in range(K):
# 현재 생산 사이클보다 사람이 일찍 방문한다면
# 현재까지 총 생산가능한 빵개수를 시간으로 표현!
if M * second > arrive[0]:
result = 1
print(f'#{tc} Impossible')
break
arrive.pop(0)
second +=1
else:
if result == 0:
print(f'#{tc} Possible')
728x90
'ALGORITHM > 자료구조' 카테고리의 다른 글
[백준 9012번] 파이썬 - 괄호 (1) | 2022.09.13 |
---|---|
[백준 1920] 파이썬 - 수 찾기 (0) | 2022.09.09 |
[백준 10845] 파이썬 - 큐 (0) | 2022.09.07 |
[백준 10828] 파이썬 - 스택 (0) | 2022.09.07 |
[프로그래머스 lv.1] 파이썬 - 크레인 인형뽑기 (0) | 2022.08.26 |