[백준 알고리즘] Node.js 1149. RGB거리
2023. 6. 1. 15:33ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
2. 풀이
1) 이전에 사용했던 색상을 사용할 수 없다.
2) 이전 색상을 제외한 값을 더하면서 진행한다 - DP 이용!
3) 색상은 빨강, 초록, 파랑 3가지의 색상 중 하나를 사용한다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const n = +inputs.shift();
const dp = [];
for(let i = 0; i < n; i++){
dp.push(inputs[i].split(' ').map(Number));
}
for(let i = 1; i < n; i++){
for(let j = 0; j < 3; j++){
let prev;
if(j === 0) prev = Math.min(dp[i-1][j+1], dp[i-1][j+2])
else if(j === 1) prev = Math.min(dp[i-1][j-1], dp[i-1][j+1])
else prev = Math.min(dp[i-1][j-2], dp[i-1][j-1])
dp[i][j] += prev;
}
}
console.log(Math.min(...dp[n-1]));
- j는 색상의 값으로 최대 3까지이다. dp를 이용하기 때문에 1부터 시작.
- i는 집의 개수이다. 최대 n까지.
3. 정리
- 처음에 코드를 작성할 때 이전 색상을 사용해서는 안된다는 조건을 사용하지 않아 답을 구할 수 없었다.
- dp에 대한 개념을 어느정도 이해할 수 있었다.
4. DP에 대해 내가 이해한 내용.
- 이미 했던 연산이 반복되는 결점을 보완하기 위해 사용.
- 재귀에서 반복되던 연산을 없앤 알고리즘.
- 한번 계산된 결과를 저장해두었다가 활용하는 방식으로 중복 계산을 줄이는 것을 메모이제이션이라 함.
- TOP-DOWN 이나 BOTTOM-UP 방식을 사용.
-> TOP-DOWN은 큰수부터 작은 수 순서로, BOTTOM-UP은 반대.
** 기존 값에 연산한 값을 추가로 연산하여 저장한다!!
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 11659. 구간 합 구하기 4 (0) | 2023.06.03 |
---|---|
[백준 알고리즘] Node.js 9461. 파도반 수열 (0) | 2023.06.01 |
[백준 알고리즘] Node.js 20920. 영단어 암기는 괴로워 (0) | 2023.05.18 |
[백준 알고리즘] Node.js 14215. 세 막대 (0) | 2023.05.13 |
[프로그래머스] 카드 뭉치 (0) | 2023.04.12 |