SWEA 1860번 진기의 최고급 붕어빵 (Python, 구현, D3)

전승재·2023년 9월 25일
0

알고리즘

목록 보기
49/88

SWEA 1860번 진기의 최고급 붕어빵 문제 바로가기

문제 접근

for문으로 시간을 1초씩 증가시켜주면서 붕어빵의 개수가 0미만이 되는 순간이 발생한다면 Impossible을 출력하고 그런 경우가 없다면 Possible을 출력하는 방식으로 접근해야 된다고 생각했다.
따라서 for문의 마지막은 손님이 가장 마지막에 오는 시간으로 지정해준다.

그 후에 dictionary를 사용하여 손님이 같은 시간에 오는 경우도 처리해준다.

사실 이 문제에서 Impossible을 Imposiible로 잘못 쳐서 계속해서 틀렸었다.... 문제를 확실히 보쟈.....

문제 풀이

 for i in range(max_c+1): # 최대 초까지 1초씩 증가 시키면서
        if index>=N: #만약 index 끝까지 다 돌았다면 함수 종료
            break
        if i%M==0 and i != 0: # M초가 지날때마다 붕어빵개수 K 추가
            count += K
        if client[index] == i: #손님이 왔다면 count에서 손님의 숫자 빼줌
            count -= dic[i]
            if count<0: # 만약 count가 음수라면 손님이 기다려야 하므로 result에 
            #Impossible을 넣고 함수 종료해줌
                result = 'Impossible'
                break
            index += 1 # 그게 아니라면 index를 1증가시켜서 다음 손님이 오는 시간을 체크

제출 코드

T = int(input())
for test_case in range(1, T + 1):
    N, M, K = map(int, input().split()) # M초간 K개의 붕어빵
    client = list(map(int, input().split())) # 기다리는 시간 없이 제공한다면 possible
    client.sort()
    max_c = client[-1]
    dic = dict()
    for i in client:
        if i in dic:
            dic[i] += 1
        else: dic[i] = 1
    index = 0
    count = 0
    result = "Possible"
    for i in range(max_c+1): # 최대 초까지 1초씩 증가 시키면서
        if index>=N:
            break
        if i%M==0 and i != 0: # M초가 지날때마다
            count += K
        if client[index] == i:
            count -= dic[i]
            if count<0:
                result = 'Impossible'
                break
            index += 1
    print(f'#{test_case} {result}')

0개의 댓글