[백준] 2579번: 계단 오르기

2024. 9. 20. 00:47·PS

 

 


 

문제

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

 

개념

DP(다이나믹 프로그래밍)

 

 

실행 결과

 

 

 

 

 

구현 코드(c++)

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);

  int n;
  cin >> n;

  vector<long long> v(n + 1); // 계단 별 점수 배열

  for (int i = 1; i <= n; i++) {
    cin >> v[i];
  }

  vector<long long> dp(n + 1, 0); // 총 점수 배열

  dp[1] = v[1];
  dp[2] = v[1] + v[2];
  dp[3] = max(v[1] + v[3], v[2] + v[3]);

  for (int i = 4; i < n + 1; i++) {
    // 두 계단을 건너뛴 경우 or 한 계단만 건너뛴 경우
    dp[i] = max(dp[i - 2] + v[i], dp[i - 3] + v[i - 1] + v[i]);
  }

  cout << dp[n];

  return 0;
}

 

 

 

 

코드 설명

일단 dp 배열을 선언하고, 계단을 하나씩 오른다고 생각해본다.

 

dp[1] = 첫번째 계단

dp[2] = 첫번째 계단 + 두번째 계단

dp[3] => 여기서부터 계단을 오르는 방법이 다음과 같이 두 종류로 나뉜다.

다음 계단을 건너뛸것인지 그냥 바로 오를것인지!

즉, 3번째 계단에서 얻을 수 있는 점수의 최댓값은 max(v[1] + v[3], v[2] + v[3])가 될 것이다.

 

따라서 이 법칙에 따라 점화식을 세우면 다음과 같다.

dp[i] = max(dp[i - 2] + v[i], dp[i - 3] + v[i - 1] + v[i]);

 

두 계단을 건너 뛴 경우 or 한 계단만 건너 뛴 경우 중 더 큰 값을 취하도록 한다.

후자에서 dp[i-3]인 이유는 문제에서 세 계단을 연속해서 밟을 수 없기 때문에 네번째 전 dp합을 더해야 함.

 

 

 

 


 

 

저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[백준] 11407번: 동전 0  (0) 2024.09.24
[코드트리] 원형 수열에서의 인원 제거  (0) 2024.09.20
[백준] 15649번: N과 M (1)  (0) 2024.09.18
[백준] 11399번: ATM  (0) 2024.09.17
[백준] 28445번: 알록달록 앵무새  (0) 2024.09.16
'PS' 카테고리의 다른 글
  • [백준] 11407번: 동전 0
  • [코드트리] 원형 수열에서의 인원 제거
  • [백준] 15649번: N과 M (1)
  • [백준] 11399번: ATM
abyss-s
abyss-s
프론트엔드 개발합니다!
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (195)
      • Web (17)
        • JavaScript (6)
        • TypeScript (1)
        • React (6)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (18)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (4)
        • LG U+ URECA (5)
        • Project (2)
        • Conference (2)
      • IT (3)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • Statistics (11)
      • Book (5)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Baekjoon
    • X
    • LinkedIn
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    백준
    생활코딩
    코드트리
    통계학
    Java
    React
    JavaScript
    C++
    파이썬
    BAEKJOON
    그리디
    자바기반응용프로그래밍
    운영체제
    BFS
    OS
    자바스크립트
    ossca
    Python
    DP
    네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
abyss-s
[백준] 2579번: 계단 오르기
상단으로

티스토리툴바