<문제출처>
https://www.acmicpc.net/problem/4811
<체크포인트>
시간 | 쉽게해결 | 1시간이내 | 1시간 이상 or 몇 일 걸림 | 솔루션 보고 해결 |
체감 난이도 | 하 | 중 | 상 | 최상 |
이해도 | 완벽히이해 | 다소 헷갈리는 부분있음 | 이해못함 | |
덧붙일 말 |
<고민 끄적끄적>
문제유형은 dp문제였다. 그런데 규칙을 찾는데에서 생각보다 오래걸렸다.
첫 접근은 점화식 이었는데 어지간히 절대 안구해지길래 패스~
두번째는 나올 수 있는 조합을 o,x로 표현하여 규칙을 찾아보았다.
그런데 문제 특성상 하나의 조각이 나누어지기 전에는 절대 반조각이 나올 수 없다는 점을 고민하다가 반조각의 경우 한조각이 나온 횟수보다 많으면 안되겠구나 라고 생각 -> 바로 그래프로 표현해봤는데 그림에서 아래와같이 중복조합 길찾기와 같은 문제라는걸 깨달았다.(사실 고딩때였다면 바로 풀었을지도..?... 난 퇴화했다 어쩐지 골드5..)
이후부터는 그냥 dp테이블을 구성하고 구현하면 끝!
최종코드
import sys; input = sys.stdin.readline
dp = [[1]*31 for _ in range(31)]
for i in range(1, 31):
for j in range(i, 31):
if j == i:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = dp[i][j-1] + dp[i-1][j]
while True:
n = int(input())
if n == 0:
break
print(dp[n][n])
-> dp문제이기 때문에 점화식 안됐으면 빨리 다른방식 생각해볼걸 그랬다. dp문제는 정해져있는 여러 풀이법들을 안되면 빠르게 바꿔서 적용해보면서 시간을 낭비하지 말아야 겠다.
생각보다 dp가 점화식으로 어이없게 빨리풀리는 경우가 있어서..점화식을 일단 의심해보는 습관이 있는것 같다 ㅋㅋㅋㅋ
'algorithm > 백준' 카테고리의 다른 글
[백준-파이썬] 10971(Silver)/백트래킹 : 외판원 순회2 (0) | 2023.02.12 |
---|---|
[백준-파이썬] 14499(Gold4)/구현 : 주사위 굴리기 (0) | 2023.02.05 |
[백준-파이썬] 14942(Platinum5)/dfs : 개미 (0) | 2023.02.05 |
[백준-파이썬] 1103(Gold2)/dfs : 게임 (0) | 2023.01.29 |
[백준-파이썬] 3109(Gold2)/dfs : 빵집 (0) | 2023.01.28 |