알고리즘

[백준]- 2225번

예림밈 2025. 4. 25. 16:06

✅ 백준 2225번 문제

문제

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

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

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

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


해결 방법

잘못된 풀이
아무 생각 없이 문제를 보고 중복 순열로 가져와서 출력하면 안될까? 생각을 했었다.
그 결과 당연히 시간초과가 발생했고, 정신 차린 후 DP를 이용하였다.

**DP?
DP란, 동적 계획법 (Dynamic programming)으로 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 의미한다.

DP로 해결하기 위해 점화식을 세운 후 코드를 작성하였다.

코드

  • K가 1일 경우 자기 자신 밖에 해당이 안되므로 따로 계산할 필요 없이 바로 1을 출력하도록 하였다.
  • K가 1이 아니라면 2차원 배열을 선언하여 1,000,000,000 를 나눈 값을 배열에 저장하였다.

문제 링크 : https://www.acmicpc.net/problem/2225

 

해당 게시글은 벨로그에서 이전된 글입니다. (https://velog.io/@yerim159/%EB%B0%B1%EC%A4%80-2225%EB%B2%88-%EB%AC%B8%EC%A0%9C)