정렬
페이지
미리보기
다이나믹 프로그래밍구현홀짝성
자세히 보기
백준 17291번
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))                                        # 살아 남은 놈 출력

# 이거 시간초과나면 힙쓸려 했는데 통과됐네????
그리디 알고리즘구현시뮬레이션
자세히 보기
백준 23351번
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)