본문 바로가기

Programming/DP

Baekjoon / 계단오르기

https://www.acmicpc.net/problem/2579

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

https://www.acmicpc.net/problem/2156

https://serendipity-37.tistory.com/41

 

Baekjoon / DP / 포도주 시식

https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을

serendipity-37.tistory.com

포도주 시식 문제와 동일한 형태의 문제이다.

Input 조건만 조금 달라서 변경해주었다.

 

Solution

n = int(input())
step = [0]
for _ in range(n):
    a = int(input())
    step.append(a)

def solution(n, step):
    dp = [False] * (n+1)
    dp[0] = 0
	
    # n은 300이하 자연수라는 조건이기에, 1 혹은 2가 나올 수도 있다.
    if n == 1 :
        return step[1]
    elif n == 2 :
        return step[1]+step[2]
    else :
        dp[1] = step[1]
        dp[2] = max(dp[1]+step[2], step[2])

        for i in range(3,n+1):
            a = dp[i-2]+step[i]	 # i-1 건너뛰고 i번째 포함한 경우
            b = dp[i-3]+step[i-1]+step[i]  # i-1,i번째 연속으로 포함한 경우, i-2는 건너뛰어야함
            # c = dp[i-1]  # 마지막 계단을 무조건 포함해야하니까 제외됨.
            dp[i] = max(a,b)
        return dp[-1]

print(solution(n,step))

'Programming > DP' 카테고리의 다른 글

Baekjoon / 평범한 배낭  (0) 2022.04.26
Baekjoon / 소형기관차  (0) 2022.03.22
Baekjoon / 다익스트라 알고리즘 / 최단 경로  (0) 2022.02.14
Baekjoon / DP / 포도주 시식  (0) 2022.02.12
Baekjoon / DP / 설탕 배달  (0) 2022.02.12