티스토리 뷰
문제:www.acmicpc.net/problem/2225
이 문제의 경우 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 |
이 문제는 쉬운계단 수와 비슷한 것 같다.
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(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
- 그래프
- Spring
- setattr
- Celery
- headers
- Linux
- thread
- Pattern
- Python
- 자바
- 면접
- 프로그래머스
- ubuntu
- dockerignore
- docker-compose
- Command Line
- BFS
- Collections
- Java
- django
- docker
- PostgreSQL
- 카카오
- 파이썬
- env
- postgres
- 백준
- 알고리즘
- 2021 KAKAO BLIND RECRUITMENT
- DRF
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |