Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이썬
- ux·ui디자인
- 멋쟁이사자처럼
- DFS
- Rag
- Join
- seaborn
- SQL
- TiL
- likelion
- folium
- 프로젝트
- 멋재이사자처럼
- 알고리즘
- graphrag
- 인턴10
- DP
- likelionlikelion
- 그리디
- paper review
- BFS
- GNN
- 시각화
- 멋사
- 마이온
- tog
- intern10
- 마이온컴퍼니
- parklab
- Python
Archives
- Today
- Total
지금은마라톤중
[백준] 1010번 다리 놓기 본문
이 문제는 2가지 풀이법으로 해결했습니다.
1. 조합
2. DP
1. 조합
문제를 봤을 때 가장 직관적으로 생각났습니다.
# 조합으로 풀기
def fac(a):
num = 1
for i in range(1,a+1):
num *= i
return num
t = int(input())
for _ in range(t):
n,m = map(int,input().split())
res = fac(m)//(fac(n)*fac(m-n))
print(res)
2. DP
DP 문제를 풀어보려고 DP 문제 목록에서 골랐기 때문에 DP인걸 알 수 있었습니다. 하지만 문제만 보고 DP라는걸 알아차리는 것이 쉽지 않은 것 같습니다..ㅎㅎ
위 그림처럼 경우의 수가 규칙성을 가졌습니다. 그래서 작은문제로 쪼개어 해결할 수 있었습니다.
# DP로 풀기
dp = [[0]*30 for _ in range(30)]
t = int(input())
for i in range(30):
for j in range(30):
if i == 1:
dp[i][j] = j
else:
if i == j :
dp[i][j] = 1
elif i < j :
dp[i][j] = dp[i-1][j-1] + dp[i][j-1]
for _ in range(t):
n,m = map(int,input().split())
print(dp[n][m])
아직 DP로 사고하는 것이 어려운 것 같습니다.
좀 더 많은 문제를 접해봐야할 것 같습니다!
'STUDY > Python 알고리즘' 카테고리의 다른 글
[백준]1463번 1로 만들기 (3) | 2024.05.01 |
---|---|
[백준] 2579번 계단오르기 (0) | 2024.04.09 |
[이론] DP(Dynamic Programming, 동적 계획법) (1) | 2024.04.04 |
[백준] 111724번 연결 요소의 개수 (0) | 2024.04.02 |
[백준] 2667번 단지번호붙이기 (1) | 2024.03.27 |
Comments