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 |