[백준 알고리즘] Node.js 9461. 파도반 수열
2023. 6. 1. 16:24ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/9461
9461번: 파도반 수열
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의
www.acmicpc.net
2. 풀이
- DP를 이용한 문제이기 때문에 점화식을 찾아야한다.
p(1) = 1;
p(2) = 1;
p(3) = 1;
p(4) = 2 = p(1) + p(2)
p(5) = 2 = p(3) + p(2)
p(6) = 3 = p(5) + p(1)
p(7) = 4 = p(6) + p(2)
p(8) = 5 = p(7) + p(3)
p(9) = 7 = p(8) + p(4)
p(10) = 9 = p(9) + p(5)
p(11) = 12 = p(10) + p(6)
p(12) = 16 = p(11) + p(7)
p(13) = 21 = p(12) + p(8)
- 이런 방식으로 진행된다고 생각하고 코드를 작성했다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);
const t = inputs.shift();
const dp = [];
dp[1] = 1;
dp[2] = 1;
dp[3] = 1;
dp[4] = 2;
dp[5] = 2;
let answer = "";
for(let i = 0; i < t; i++){
for(let j = 6; j <= inputs[i]; j++){
dp[j] = dp[j-1] + dp[j-5];
}
answer += `${dp[inputs[i]]}\n`;
}
console.log(answer)
3. 다른 사람의 풀이
- n = (n-3) + (n-2) 으로 진행된다고 한다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);
const t = inputs.shift();
const dp = [];
dp[1] = 1;
dp[2] = 1;
dp[3] = 1;
let answer = "";
for(let i = 0; i < t; i++){
for(let j = 4; j <= inputs[i]; j++){
dp[j] = dp[j-3] + dp[j-2];
}
answer += `${dp[inputs[i]]}\n`;
}
console.log(answer)
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 11399. ATM (0) | 2023.06.05 |
---|---|
[백준 알고리즘] Node.js 11659. 구간 합 구하기 4 (0) | 2023.06.03 |
[백준 알고리즘] Node.js 1149. RGB거리 (0) | 2023.06.01 |
[백준 알고리즘] Node.js 20920. 영단어 암기는 괴로워 (0) | 2023.05.18 |
[백준 알고리즘] Node.js 14215. 세 막대 (0) | 2023.05.13 |