준영이의 성장일기(FrontEnd)

백준 js - 9095번 본문

코테 및 알고리즘

백준 js - 9095번

Jay_Jung 2024. 8. 16. 15:30

<문제>

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

 

 

 

 

<문제 핵심>

 

1.  다이나믹 프로그래밍(동적 계획법)을 사용하는 문제였고 DP의 핵심은 큰 문제를 작은 문제로 나누었을 때 동일한 작은 문제가 반복해서 등장하여야 한다.  occation[1], occation[2], occation[3] 일 때 숫자를 조합하여 각 숫자를 만들 수 있는 경우의 수를 구한다. 각각 1, 2, 4 라는 경우의 수가 나오는데 이때 점화식을 유출할 수 있다.

 

occation[4] = occation[i-3] + occation[i-2] + occation[i-1] 

 

이처럼 숫자 4를 만들기 위해 조합할 수 있는 경우의 수는 7가지 이고 해당 경우의 수는 이전에 구한 occation[1], occation[2], occation[3]을 통해서 구할 수 있다. 

 

 

2. 경우의 수

 

1을 1,2,3을 이용해 만드는 경우의 수 : 1

2를 1,2,3을 이용해 만드는 경우의 수 : 2

3를 1,2,3을 이용해 만드는 경우의 수 : 4

4를 1,2,3을 이용해 만드는 경우의 수 : 7

 

<문제 풀이과정 및 순서도>

1. 입력받은 뒤 1부터 3까지의 수를 만들기 위해 조합할 수 있는 경우의 수를 미리 occation 배열에 담는다. 

 

2. 4부터 반복문을 돌리게 되는데 점화식을 파악한 뒤 점화식과 규칙에 맞추어 반복문을 순회

 

3. 4, 7, 10에 해당하는 인덱스의 값을 출력한다.

const input = require("fs")
  .readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
  .toString()
  .trim()
  .split("\n");

const t = Number(input.shift());
const testCase = input.map(Number);

//0~3 인덱스에 값을 미리 설정
const occation = [0, 1, 2, 4];

for (let i = 4; i <= Math.max(...testCase); i++) {
  occation[i] = occation[i - 3] + occation[i - 2] + occation[i - 1];
}

testCase.forEach((value) => {
  console.log(occation[value]);
});

'코테 및 알고리즘' 카테고리의 다른 글

백준 js 9084번  (4) 2024.08.20
백준 js 1932번  (0) 2024.08.19
백준 js 17129번  (0) 2024.08.13
백준 js 15558번  (0) 2024.08.13
백준 js - 6198번  (0) 2024.08.09