import sys
input = sys.stdin.readline
n = int(input())
# 벌레 수명 깍고 수명 다했으면 죽이는 함수
def minusLife(bug):
didx = []
for i in range(len(bug)):
bug[i] -= 1
if bug[i] == 0:
didx.append(i-len(didx)) # 이놈 죽어야됨 (remove 고려해 길이만큼 뺐음)
for i in didx:
bug.remove(i) # 죽임 ㅅㄱ
return bug
bug = [3] # 처음엔 홀수라 3 넣어줌
for i in range(2, n+1): # n년까지 반복 (n <=20)
#print(bug)
for j in range(len(bug)):
bug.append(5) if i % 2 == 0 else bug.append(4) # 바로 마이너스라 5랑 4임
bug = minusLife(bug) # 뒤질놈은 뒤지고 수명 깍음
print(len(bug)) # 살아 남은 놈 출력
# 이거 시간초과나면 힙쓸려 했는데 통과됐네????
문제풀이
핵심 개념과 풀이 흐름을 짧고 선명하게 정리했습니다.
import sys
input = sys.stdin.readline
# n: 화분 개수
# k: 초기 수분
# a: 물을 줄 연속된 화분 수 (a는 n의 약수임)
# b: 문을 준 화분의 수분 증가량 (1 < a * b < n)
n, k, a, b = map(int, input().split())
cnt = 0
c = [k for _ in range(n)]
flag = True
while flag:
cnt += 1 # 다음 날
# 죽기 직전인 놈 인덱스 알아내기
_min = min(c)
idx = c.index(_min)
# 죽기 직전인 놈부터 k개의 연속된 화분에 물주기
for i in range(a):
c[idx + i] += b
# 모든 화분의 수분 1 감소
for i in range(n):
c[i] -= 1
if c[i] == 0:
flag = False
print(cnt)