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

2022. 7. 28. 22:53Algorithm/백준

class : 3

level : silver 3

문제 링크 : 계단 오르기

 

2579번: 계단 오르기

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

www.acmicpc.net

 

My Solution

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim();
input = input.split('\n').map(Number);
const N = input.shift();
let answer = 0;
input.unshift(0);/// 시작점 포함하기
let a = new Array(N+1).fill(0);
let b = new Array(N+1).fill(0);
a[1] = input[1];
b[1] = input[1];
for(let i = 2; i < N + 1; i++){
    a[i] = Math.max(a[i-2]+input[i],b[i-2]+input[i]);
    b[i] = a[i-1]+input[i];
}
console.log(Math.max(a[N],b[N]));

 

풀이방법

접근 방법으로는 Greedy를 생각했으나 반례가 생각보다 많아 DP(Dynamic Programming)로 선회하였다.

시작을 0번 index로 잡고 시작을 하였다.

N번째 계단을 밟기 위해서는 두 가지 경우가 있다.

1. N-2번째 계단에서 바로 N번째 계단으로 오는 방법

2. N-3번째 계단에서 바로 N-1번째 계단으로 온 후 N번째 계단으로 오는 방법

 

1번 방법은 a라는 Array에 담고 2번 방법은 b라는 Array에 담았다.

첫번째 계단만 동일하게 a와 b 모두 값을 넣어 주었다.

 

마지막에는 a와 b중 더 큰 것을 출력하였다.

 

느낀점
Dynamic Programming에서 점화식 세우는 것이 관건이다.

매우 빠르게 할 수 있다고 생각이 든다.

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

[JavaScript] 백준 1149 : RGB거리  (0) 2022.08.03
[JavaScript] 백준 5430 : AC  (0) 2022.08.03
[JavaScript] 백준 2178 : 미로 탐색  (1) 2022.07.28
[JavaScript] 백준 1927 : 최소 힙  (0) 2022.07.27
[JavaScript] 백준 10845 : 큐  (0) 2022.07.20