Pepperminttt
Pepperminttt's Dev
Pepperminttt
전체 방문자
오늘
어제
  • devInfo (86)
    • forBeingGoodDeveloper (2)
    • React (2)
      • LostArk Open API (1)
    • algorithm (58)
      • problems (44)
      • theory (14)
    • computerScience (8)
      • network (8)
    • javaScript (8)
    • Java (4)
    • web (2)
      • webApplication (2)
    • etc. (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • node.js
  • 백준
  • 알고리즘
  • 그래프
  • dfs문제
  • bfs문제
  • BFS
  • solved.ac
  • 탐욕법
  • dfs
  • greedy
  • JavaScript
  • 프로그래머스
  • DP
  • Network
  • 벨만-포드
  • Java
  • C++
  • 탐욕법 문제
  • DP문제

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Pepperminttt

Pepperminttt's Dev

[백준] 15988번 1, 2, 3 더하기 3
algorithm/problems

[백준] 15988번 1, 2, 3 더하기 3

2022. 11. 7. 18:51

문제

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

 

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

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

www.acmicpc.net


문제 풀이

 해당 문제의 예시 입/출력을 보자. 4, 7, 10과 같은 작은 수가 나오더라도 이에 수 십배의 경우의 수가 나온다. n의 최댓값이 1,000,000인 것을 감안하면 완전 탐색은 불가능하다.

 

 문제를 조금 더 분석해보자. 식으로 나타낼 수 있는 숫자는 1, 2, 3이다. 나타내야 하는 수를 k라 할 때, k를 나타내기 위해서는 k보다 작은 수에서 1,2,3을 더하면 된다.

 즉 k를 1,2,3으로 나타 낼 수 있는 방법 k-1 +1, k - 2 + 2, k - 3 + 3이다.

해당 문제의 점화식

 

이 때 k -1, k -2 , k -3를 메모이제이션을 해두어 덧셈 연산으로 값을 구할 수 있도록 한다.

 


풀이 코드

const fs = require('fs');
const stdin = (process.platform === 'linux'? fs.readFileSync('/dev/stdin').toString() :
`3
4
7
10`).split('\n');

const input = (() => {
    let line = 0;
    return () => stdin[line++];
})();


function solution(){
    const answer = [];
    const data = [];
    let memo = [0,1,2,4];
    const N = Number(input())
    for(let i = 0; i < N; i++){
        const tempData = Number(input());
        data.push(tempData);
    }
    var num = Math.max(...data);
    for(let j=4; j<=num; j++){
        memo[j] = (memo[j-1] + memo[j-2] + memo[j-3]) % 1000000009;
    }

    for(let i=0; i<N; i++){
        console.log(memo[data[i]]);
    }



}

solution();

'algorithm > problems' 카테고리의 다른 글

[백준] 14226번 이모티콘 - Node.js  (0) 2022.11.13
[백준] 1697번 숨바꼭질 _ Node.js  (0) 2022.11.12
[백준] 2178번 미로 탐색  (0) 2022.11.07
[백준] 14888번 연산자 끼워넣기  (0) 2022.11.07
[Programmers]큰 수 만들기  (0) 2022.11.05
    'algorithm/problems' 카테고리의 다른 글
    • [백준] 14226번 이모티콘 - Node.js
    • [백준] 1697번 숨바꼭질 _ Node.js
    • [백준] 2178번 미로 탐색
    • [백준] 14888번 연산자 끼워넣기
    Pepperminttt
    Pepperminttt
    HTML, JavaScript, Python 등 Computer language TIL

    티스토리툴바