백준 9764번 서로 다른 자연수의 합 [C++]

2024. 9. 13. 18:10· [백준]/C++
목차
  1. #문제 간단 정리
  2. #문제 해결 방법
  3. #전체 코드
반응형

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

 

 

 

#문제 간단 정리

 

#문제 해결 방법

 

    // dp[i][j] 1~j의 수들의 합으로 i 를 만드는 방법의수
    // 1. j를 포함하지 않고 만드는경우
    // dp[i][j-1];
    // 2. j를 포함해서 i를 만드는경우
    // if(i>=j)  D[i][j] = (D[i][j] + D[i-j][j-1]) % mod ; 
    // D[i-j][j-1] = i-j를 1 ~ j-1 사이의 수들로 만드는방법의 수 

 

일단 해결로직은 저렇긴한데

dp를 떠올리는 발상을 정리해보자면 

일단 특정 숫자를 쓰냐 안쓰냐로 생각 할 수 있고

j를 안쓰고 만들면 j-1 개를 가지고 만드는 가지수와 같고

j까지의 숫자를 써서 N을 만드는 방법은 = j-1 까지의 숫자를  써서 N-j 을 만들는 방법 + j를 안쓰고 만드는 방법으로 나눌수 있다

 

때문에 i 를 j 개의 숫자를 써서 만드는

dp[i][j] 1~j의 수들의 합으로 i 를 만드는 방법의수 를 떠올리면 된다

 

#전체 코드

 

#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
#define MOD 100999

int dp[2001][2001];

int main() {

    int t;
    int n;

    // dp[i][j] 1~j의 수들의 합으로 i 를 만드는 방법의수
    // 1. j를 포함하지 않고 만드는경우
    // dp[i][j-1];
    // 2. j를 포함해서 i를 만드는경우
    // if(i>=j)  D[i][j] = (D[i][j] + D[i-j][j-1]) % mod ; 
    // D[i-j][j-1] = i-j를 1 ~ j-1 사이의 수들로 만드는방법의 수 


    dp[0][0] = 1;
    for (int i = 1; i < 2001; i++) {
        dp[i][0] = 0;
        dp[0][i] = 1;
    }
    for (int i = 1; i < 2001; i++) {
        for (int j = 1; j < 2001; j++) {
            dp[i][j] = dp[i][j - 1];  //j를 포함하지 않고 i를 만드는 경우
            if (i >= j) {
                dp[i][j] += dp[i - j][j - 1];
                dp[i][j] %= MOD;
            }
        }
    }

    cin >> t;
    while (t--) {
        cin >> n;
        cout << dp[n][n] << endl;
    }


    return 0;
}
반응형

'[백준] > C++' 카테고리의 다른 글

백준 7479번 Greatest Product [C++]  (0) 2024.09.13
백준 16624번 Bingo Ties [C++]  (0) 2024.09.13
백준 4358번 생태학 [C++]  (0) 2024.09.13
백준 9764번 서로 다른 자연수의 합 [C++]  (0) 2024.09.08
백준 10026번 적록색약 [C++]  (0) 2024.09.07
  1. #문제 간단 정리
  2. #문제 해결 방법
  3. #전체 코드
'[백준]/C++' 카테고리의 다른 글
  • 백준 7479번 Greatest Product [C++]
  • 백준 16624번 Bingo Ties [C++]
  • 백준 4358번 생태학 [C++]
  • 백준 9764번 서로 다른 자연수의 합 [C++]
경우42
경우42
개발 등 공부기록용 블로그입니다
경우없는 개발 블로그개발 등 공부기록용 블로그입니다
경우42
경우없는 개발 블로그
경우42
전체
오늘
어제
  • 분류 전체보기 (225)
    • 후기 (1)
    • [Codeforces] (4)
    • [SW Expert Academy] (10)
    • [백준] (149)
      • C++ (144)
      • C# (4)
      • python (1)
    • [프로그래머스] (15)
      • lv.3 (8)
      • lv.2 (4)
      • lv.1 (3)
    • [CS(Computer Science)] (2)
      • 자료구조 (2)
    • 알고리즘 (32)
      • Tip (6)
      • 코드 (15)
      • SQL 문법 정리 (10)
    • 웹개발지식 (2)
    • 스프링 (2)
    • 딥러닝 (0)
    • [가톨릭대주변음식점] (2)
      • 런칭&모니터링 (0)
      • 개발 (0)
      • 트러블 슈팅 (2)
    • [만냠-밥약속매칭플랫폼] (1)
    • [일정정리 웹 개발] (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 133300번
  • 코드 #다익스트라
  • 17352번
  • 백준
  • c#
  • 냠톨릭
  • 2751번
  • 14246번
  • 4920번
  • 10845번
  • 10989번
  • 2003번
  • 프로그래머스
  • lv.2
  • C++
  • 두 포인터
  • 플로이드-워셜
  • 5585번
  • 9012번
  • 11365번

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
경우42
백준 9764번 서로 다른 자연수의 합 [C++]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.