## 의사코드 ##
# 모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때
# -> 수분이 작은 순서대로 화분을 정렬
# while 화분에 0이 없을 동안:
# 모든 조건 수행 후
# 화분.sort()
# 날짜 += 1
첫 번째 시도
n, k, a, b = map(int, input().split())
# 각 화분은 초기에 k만큼의 수분을 머금고 있음
pots = [k for _ in range(n)]
day = 0 # 물을 준 날짜
# 모든 캣닢이 살아 있을 동안 반복
while 0 not in pots:
# 연속된 a개의 화분의 수분이 b만큼 증가
for i in range(a):
pots[i] += b
# 모든 화분의 수분 1씩 감소
for p in pots:
p -= 1
# 수분이 작은 순서대로 화분을 오름차순 정렬
pots.sort()
# 날짜 + 1
day += 1
print(day)
-> 시간 초과
통과한 코드
n, k, a, b = map(int, input().split())
# 각 화분은 초기에 k만큼의 수분을 머금고 있음
pots = [k for _ in range(n)]
day = 0 # 물을 준 날짜
# 모든 캣닢이 살아 있을 동안 반복
while 0 not in pots:
# 연속된 a개의 화분의 수분이 b만큼 증가
for i in range(a):
pots[i] += b
# 모든 화분의 수분 1씩 감소
for i in range(n):
pots[i] -= 1
# 수분이 작은 순서대로 화분을 오름차순 정렬
pots.sort()
# 날짜 + 1
day += 1
print(day)
-> 모든 화분의 수분 1씩 감소할 때, for p in pots가 아닌 for i in range(n)으로 수정
모든 캣닢이 살아 있는 기간이 최대한 길어지도록 하기 위해 수분이 작은 순서대로 정렬해야 한다는 점이 포인트
탐욕 알고리즘은 구현할 때 정렬도 함께 사용된다는 점 잊지 말기
cf) while min(pots) != 0이while 0 not in pots보다 4 ms 더 빠름