본문 바로가기
알고리즘 스터디/백준 알고리즘 기초 1

[백준 15988번 1, 2, 3 더하기 3 - node.js] [알고리즘 기초 1/2]

by 레일라오리덕 2021. 8. 20.
728x90

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

 

15988번: 1, 2, 3 더하기 3

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.

www.acmicpc.net

 

문제

 

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 1,000,000보다 작거나 같다.

 

출력

 

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.

 

예제 입출력

 

입력 출력
3
4
7
10
7
44
274

 

풀이[node.js]

 

 

728x90

이번 문제는 1, 2, 3 더하기와 같은 문제지만, 범위가 다르다.

1, 2, 3 더하기 설명은 아래 링크에 있다.

 

https://leylaoriduck.tistory.com/518?category=880546 

 

[백준 9095번 1, 2, 3 더하기 - node.js] [알고리즘 기초 1/2]

https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은..

leylaoriduck.tistory.com

 

위의 방법과 같고 단지 1000000009로 나눈 나머지 값만 arr에 넣어주면 되므로, 설명은 생략하겠다.

 

var fs = require('fs');
var inputs = fs.readFileSync('/dev/stdin').toString().split('\n').map(v=>Number(v));
var cases = Number(inputs[0]);
inputs.shift();
var arr = [0, 1, 2, 4];
var num = Math.max(...inputs);
for(var j=4; j<=num; j++){
    arr[j] = (arr[j-1] + arr[j-2] + arr[j-3]) % 1000000009;
}
for(var i=0; i<cases; i++){
    console.log(arr[inputs[i]]);
}
728x90

댓글