[백준 python] 2225번 합분해 - 동적프로그래밍(DP)

2022. 2. 27. 10:38·지난 글 모음
반응형

[백준 python] 2225번 합분해 - 동적프로그래밍(DP)

레벨: 골드 5

언어: python


문제풀러가기

 

2225번: 합분해

첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

문제설명

0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오.

덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다.

입력값

첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다.

출력값

첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.

📑풀이 과정

DP 동적프로그래밍은 문제를 보고 식을 만들 수 있으면 쉽게 풀 수 있다.

k가 1일 때는 N이 어떤 값이 오더라고 답은 1이다.

N 본인만 가능하기 때문이다.

 

k가 2일 때는 N+1로 구할 수 있다.

k가 2이고 N이 1이면 (1+0), (0+1) 로 2개

N이 2이면(2+0), (0+2), (1+1) 로 3개

이 처럼 N+1로 경우의 수가 늘어난다.

 

아래의 표처럼 수를 적다보면 규칙이 보일 것이다.

dp[2][2] = dp[1][2] + dp[2][1]

 

dp[K][N] = dp[K-1][N] + dp[K][N-1]

 

dp N=       1 2 3 4 5
K=   1 1 1 1 1 1
2 2 3 4 5 6
3 3 6 10 15 21

위의 식을 만들었다면 코드로 작성하면된다.

대신

K=1 일 때는 1

k=2 일 때는 N+1

N=1 일 때는 k값을 dp배열에 넣어주어야 한다.

📋풀이 코드

N,K  = map(int, input().split())

dp = [[0]*(N+1) for _ in range(K+1)]

for i in range(1, K+1):
  for j in range(1, N+1):
    if i == 1:
      dp[i][j] = 1
    elif i ==2:
      dp[i][j] = j+1
    elif j == 1:
      dp[i][j] = i
    else:
      dp[i][j] = dp[i-1][j] + dp[i][j-1]

print(dp[K][N] % 1000000000)

반응형

'지난 글 모음' 카테고리의 다른 글

[백준 python] 1037번 약수  (0) 2022.03.02
[백준 python] 9658번 돌 게임 4 - 동적프로그래밍(DP)  (0) 2022.03.01
[백준 python] 2579번 계단 오르기 - 동적프로그래밍(DP)  (0) 2022.02.27
[백준 python] 2644번 촌수계산 DFS - 파이썬  (2) 2022.02.25
[백준 python] 1012번 유기농 배추 DFS/BFS  (0) 2022.02.23
'지난 글 모음' 카테고리의 다른 글
  • [백준 python] 1037번 약수
  • [백준 python] 9658번 돌 게임 4 - 동적프로그래밍(DP)
  • [백준 python] 2579번 계단 오르기 - 동적프로그래밍(DP)
  • [백준 python] 2644번 촌수계산 DFS - 파이썬
코딩하자영아
코딩하자영아
코딩공부내용 정리
  • 코딩하자영아
    코드치고 무게치고
    코딩하자영아
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 개발 (2)
      • 지난 글 모음 (81)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sw정글사관학교
    리액트
    PINTOS
    템플릿 문자열
    HTML
    Express
    코딩테스트
    sw 정글
    사용자 정의 객체
    javascript
    프로그래머스
    Coding Test
    React
    백준
    malloc-lab
    SW정글
    html input
    python
    회원가입 폼
    Spring
    목록 창 만들기
    자바스크립트 문자열 변수
    회원가입
    dfsbfs
    JavaScrpit
    정글sw
    자바스크립트
    onChange
    conding test
    node.js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
코딩하자영아
[백준 python] 2225번 합분해 - 동적프로그래밍(DP)
상단으로

티스토리툴바