[BOJ] 2579. 계단 오르기

2025. 7. 15. 17:35·BOJ

📌 문제 제목

문제 링크: BOJ 2579

🗒️ 문제 설명

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다.

각 계단에는 점수가 쓰여있고 그 계단을 밟으면 점수를 얻게 된다.

다음과 같이 도착점까지 간다면 10 + 20 + 25 + 20 = 75점을 얻게 된다.

계단을 오르는데는 다음과 같은 규칙이 있다.

  • 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다.
  • 연속된 세 개의 계단을 모두 밟아서는 안된다.
  • 마지막 도착 계단은 반드시 밟아야 한다.

각 계단에 쓰여있는 점수가 주어질 때, 이 게임에서 얻을 수 있는 점수의 최댓값을 구하여라.

시간 제한: 1초

메모리 제한: 128MB

계단의 개수 <= 300

계단에 쓰여있는 각 점수 <= 10,000


💡 문제 해결 아이디어

  • 마지막 계단을 무조건 밟아야 하므로 마지막 계단을 밟기 위해 그 전에 밟아야 하는 경우는 두 가지
    • dp[i] = stairs[i] + stairs[i-1] + dp[i-3]
    • dp[i] = stairs[i] + dp[i-2]
    • 왜냐, 연속된 세 개의 계단을 밟으면 안되니까.
  • 테이블 정의
    • dp[i]는 i번째 계단까지 올라왔을 때의 최대 점수
  • 점화식 찾기
    • dp[i] = max(stairs[i-1] + dp[i-3], dp[i-2]) + stairs[i]
  • 초기값 정하기
    • dp[1] = stairs[1]
    • dp[2] = stairs[1] + stairs[2]
    • dp[3] = max(stairs[1], stairs[2]) + stairs[3]

⌛️ 시간 복잡도

  • O(N)

✅ 최종 코드

import sys
input = sys.stdin.readline

n = int(input().strip())
stairs = [0] + [int(input().strip()) for _ in range(n)]

dp = [0] * (n+1)

if n == 1:
    print(stairs[1])
elif n == 2:
    print(stairs[1] + stairs[2])
else:
    dp[1] = stairs[1]
    dp[2] = stairs[1] + stairs[2]

    for i in range(3, n+1):
        dp[i] = max(stairs[i-1] + dp[i-3], dp[i-2]) + stairs[i]

    print(dp[n])

 

'BOJ' 카테고리의 다른 글

[BOJ] 11726 2xn 타일링  (0) 2025.07.16
[BOJ] 1149. RGB거리  (0) 2025.07.16
[BOJ] 9095. 1, 2, 3 더하기  (0) 2025.07.15
[BOJ] 1463. 1로 만들기  (0) 2025.07.15
[BOJ] 30804. 과일 탕후루  (0) 2025.07.14
'BOJ' 카테고리의 다른 글
  • [BOJ] 11726 2xn 타일링
  • [BOJ] 1149. RGB거리
  • [BOJ] 9095. 1, 2, 3 더하기
  • [BOJ] 1463. 1로 만들기
rubato.dev
rubato.dev
  • rubato.dev
    rubato.dev
    rubato.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (33) N
      • BOJ (28)
      • 알고리즘 (4)
      • TIL (0)
      • Project (1) N
  • 인기 글

  • 태그

    스택
    PYTHON
    DFS
    투 포인터
    BOJ
    Next.js
    PriorityQueue
    Algorithm
    backtracking
    BFS
    stack
    dp
    Zelda
    Project
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
rubato.dev
[BOJ] 2579. 계단 오르기
상단으로

티스토리툴바