T = int(input())

for tc in range(1,1+T):

    # n 손님 숫자, m k m초 동안 붕어빵 k개 만들 수 있음
    n,m,k = map(int,input().split())

    # 손님들 도착 시간
    time = list(map(int,input().split()))

    # 정렬
    time.sort()

    # 현재 남은 붕어빵의 수
    cnt = 0

    # 손님 순서
    idx = 0

    for q in range(time[-1]+1):

        # 0은 나머지가 0으로 나오기때문에 제외
        if q != 0:
            if q%m == 0:
                cnt += k

        # 첫 번째 손님이 올 시간이면
        if q == time[idx]:

            # 남은 붕어빵이 없으면 출력하고 종료
            if cnt == 0:
                print('#{} {}'.format(tc,'Impossible'))
                break

            # 붕어빵이 남아있는 경우
            else:
                cnt -= 1
                idx += 1

        # 끝까지 다 돌았으면, 성공 출력
        if q == time[-1]:
            print('#{} {}'.format(tc,'Possible'))

그 외

문제 풀이를 위한 아이디어 및 기타 의견

 

1. 0초에도 손님이 올 수 있다.

 

2. 가장 늦게오는 손님의 시간은 11,111초 이고, 이는 최대 for문이 11,111돌아야 함을 의미

=> tc가 1000개 이므로 약 11,111,000의 for문을 돌 수 있다고 판단함

=> 이에 주어진 시간이 충분하다고 판단

 

3. 이 방법 말고 훨씬 효율적인 방법이 존재할 것임

ex) 손님이 도착하는 시간대만 확인하는 방법?

T = int(input())

for tc in range(1,1+T):

    # n 손님 숫자, m k m초 동안 붕어빵 k개 만들 수 있음
    n,m,k = map(int,input().split())

    # 손님들 도착 시간
    time = list(map(int,input().split()))

    # 정렬
    time.sort()

    # 도착한 손님의 수
    p = 0

    for q in time:

        # 도착한 시간이 0초가 아니면
        if q != 0:

            # m초 전에 손님이 온 경우
            if q//m == 0:
                print('#{} {}'.format(tc, 'Impossible'))
                break

            else:

                # q초 전에 만들 수 있는 붕어빵 개수 - q손님 이전까지 필요한 붕어빵 개수
                if (q//m)*k - p <= 0:
                    print('#{} {}'.format(tc, 'Impossible'))
                    break

                # 문제 없으면, 손님 숫자 +1
                else:
                    p += 1

        # 손님이 도착한 시간이 0초
        else:
            
            # m은 1 이상이기 때문에 무조건 손님이 기다려야 함
            print('#{} {}'.format(tc, 'Impossible'))
            break

        # 손님이 모두 방문했으면
        if p == n:
            print('#{} {}'.format(tc,'Possible'))

이 코드는 n만큼만 도는 코드

 

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다