장성호's
장성호's blog
장성호's
  • 분류 전체보기
    • 알고리즘
      • 백준
      • 이론
    • WEB
      • Spring 인강
      • 네트워크
    • 개인 프로젝트
      • 쇼핑몰 만들기

블로그 메뉴

  • 홈
  • 깃허브
전체 방문자
오늘
어제
반응형
hELLO · Designed By 정상우.
장성호's

장성호's blog

[C++] BOJ 2579 계단 오르기
알고리즘/백준

[C++] BOJ 2579 계단 오르기

2022. 1. 5. 01:46
반응형

 

 

문제 출처

백준 온라인 저지

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

 

2579번: 계단 오르기

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

www.acmicpc.net

 

문제 

 

입 / 출력

 

풀이

연속 세 개의 계단을 모두 밟지 않는 계단 오르는 최대 값을 구하기 위해서는

위의 그림처럼 현재 계단 값 + 이전 계단 값 + i - 3까지의 최대 값  혹은

위 그림처럼 현재 계단 값 + i - 2 까지의 최대 값 중 큰 값을 구하면

 

dp[n-1] 값이 총점수의 최댓값이 된다.

 

코드

#include <algorithm>
#include <iostream>

using namespace std;

const int MAX = 301;
int n, dp[MAX], stairs[MAX];

int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> stairs[i];
  }

  dp[0] = stairs[0];
  dp[1] = max(stairs[1], stairs[0] + stairs[1]);
  dp[2] = max(stairs[0] + stairs[2], stairs[1] + stairs[2]);
  for (int i = 3; i < n; i++) {
    dp[i] = max(dp[i - 2] + stairs[i], stairs[i - 1] + stairs[i] + dp[i - 3]);
  }
  cout << dp[n - 1] << "\n";
}

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[C++] BOJ 11052 카드 구매하기  (0) 2022.01.05
[C++] BOJ 9461 파도반 수열  (0) 2022.01.05
[C++] BOJ 1912 연속합  (0) 2022.01.04
[C++] BOJ 2631 줄세우기  (0) 2022.01.01
[C++] BOJ 11055 가장 큰 증가하는 부분 수열  (0) 2022.01.01
    '알고리즘/백준' 카테고리의 다른 글
    • [C++] BOJ 11052 카드 구매하기
    • [C++] BOJ 9461 파도반 수열
    • [C++] BOJ 1912 연속합
    • [C++] BOJ 2631 줄세우기
    장성호's
    장성호's
    장성호's 개발 공부 블로그

    티스토리툴바