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. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다
광고
광고
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
| [SWEA 코딩] 통역사 성경이 - PYTHON #7675 (0) | 2021.01.22 |
|---|---|
| [SWEA 코딩] S/W 문제해결 기본 GNS - PYTHON #1221 (0) | 2021.01.20 |
| [SWEA 코딩] 준환이의 운동관리 - PYTHON #3431 (0) | 2021.01.17 |
| [SWEA 코딩] 보충학습과 평균 - PYTHON #3314 (0) | 2021.01.15 |
| [SWEA 코딩] 직사각형 길이 찾기 - PYTHON #3456 (0) | 2021.01.15 |

