티스토리 뷰

알고리즘/백준

합분해 2225번 백준

글을 쓰는 개발자 2020. 12. 2. 21:14
반응형

문제:www.acmicpc.net/problem/2225

 

2225번: 합분해

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

www.acmicpc.net

이 문제의 경우 dp를 팩토리얼 개념으로 접근하다가 틀린 케이스다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
N,K= map(int,sys.stdin.readline().rstrip().split())
dp = [-1]*202
div=1000000000
dp[0]=1
dp[1]=1
def factorial(n):
    if n==1 or n==0:
        return 1
    if dp[n]!=-1:
        return dp[n]
    dp[n]=(n*factorial(n-1))
    return (n*factorial(n-1))
factorial(N+1)
ans=dp[N+1]/(dp[N+1-K+1]*dp[K-1])
 
ans%=div
print(int(ans))
cs

 

문제를 처음 접근 방법은 수학 조합으로 접근하였다. 예를 들어 5라는 숫자가 있다면 1 1 1 1 1 이렇게 다섯 개가 존재하고 K는 칸막이로서 K-1개의 칸막이를 1사이의 공간과 맨 왼쪽,오른쪽 공간 중 어디에 놓느냐에 따라 결정되는가로 접근해서 풀었다. 하지만 문제에서는 K가 N보다 더 클 수 있었다는 것에서 이미 이 풀이는 틀렸다. 만일 K가 N보다 작거나 같다는 조건이 있었다면  .

 

1
2
3
4
5
6
7
8
9
10
import sys 
N, K = map(int, sys.stdin.readline().split()) 
mod = 1000000000 
table = [1
table += [0* N 
for _ in range(1, K+1): 
    for idx in range(1, N+1): 
        table[idx] = (table[idx] + table[idx-1])%mod 
sys.stdout.write(str(table[N]))
 
cs

참고:suri78.tistory.com/105

 

[백준알고리즘] 2225번: 합분해 -Python

[백준알고리즘] 2225번: 합분해 -Python https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 이번 문제는 조금 오래 걸렸다. 한..

suri78.tistory.com

이 문제는 쉬운계단 수와 비슷한 것 같다.

  0 1 2 3
1 1 1 1 1
2 1 2 3 4

가로 값은 N에 해당하고 세로 값은 K에 해당한다.(표의 위치를 행렬의 위치로 말하겠습니다.) [1][1]에 해당하는 것은 1개 일때 0이 되는 경우 (0) 하나뿐이다. [1][1] 부터 [1][4]까지 다 이런식이고 K가 2일 때는 N=0인 경우에는 (0,0) 인 경우 밖에 없으므로 1이고 K=X (1<=X<=200) 의 모든 경우에 대해서 N=0 일 때에는 1 값을 가진다. [2][2]에 해당하는 값은 [1][2]의 값과 [1][1]의 값을 더한 것과 같다.

(0을 1개의 숫자로 만드는 경우의 수)*(1을 1개의 숫자로 만드는 경우의 수) + (1을 1개의 숫자로 만드는 경우의 수)*(0을 1개의 숫자로 만드는 경우의 수) = [1][1]*[1][2]+[1][2]*[1][1]=2
[2][4]의 경우에도 알아보자.

(0을 1개의 숫자로 만드는 경우의 수)*(3를 1개의 숫자로 만드는 경우의 수)

+ (1을 1개의 숫자로 만드는 경우의 수)*(2을 1개의 숫자로 만드는 경우의 수)

+ (2를 1개의 숫자로 만드는 경우의 수)*(1을 1개의 숫자로 만드는 경우의 수)

+ (3를 1개의 숫자로 만드는 경우의 수)*(0을 1개의 숫자로 만드는 경우의 수)

=[1][1]*[1][4]+ [1][2]*[1][3]+ [1][3]*[1][2]+[1][4]*[1][1]=4

 

정답코드를 보면 알 수 있지만 코드에서는 2차원이 아닌 1차원으로 해결하였다. 이것은 위에 참고한 블로그에서 보면 좋을 것 같다.

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

1,2,3 더하기3 15988번 백준  (0) 2020.12.03
가장 긴 증가하는 부분 수열 4 14002번 백준  (0) 2020.12.02
제곱수의 합 1699번 백준  (0) 2020.12.02
1,2,3 더하기 5 15990번 백준  (0) 2020.12.02
17299번 오등큰수  (0) 2020.12.01
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함