DP를 구현하는 방법은 2가지가 존재한다. Top-downBottom-up구현재귀반복문저장방식메모이제이션타뷸레이션 Memoization - 필요한 부분 문제들만 구하기부분 문제들의 답을 한 번 구했으면 또 구하지 않도록 (중복연산 없도록) cache에 저장해두고 다음에 갖다 쓰기 Tabulation - 부분 문제들의 답을 미리 다 구해두면 편하다.테이블을 채워간다 → 타뷸레이션 문제를 쪼개서 작은 문제부터 구해가며 원래 문제의 답을 구하는 방식이다.핵심은 점화식을 찾고, 테이블만 잘 정의하면 풀린다. (점화식 찾기가 쉽지 않다는게 문제 ㅋㅋ) 이제 문제들을 풀어보자. 문제풀이https://koreatstm.tistory.com/148https://koreatstm.tistory.com/149https:/..
백준
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8Bve3%2FbtsIefucxky%2FI4wNuqMbX5sk7w38MvGcBK%2Fimg.jpg)
https://www.acmicpc.net/problem/10844규칙을 먼저 찾아보자본인은 A4용지에 그려가며 규칙을 찾아보았다.인덱스를 0부터해서 입력이 최대 100이기에, 100행 10열로 만들어본다면, 아래 사진과 같이 나온다.써보니 규칙이 보인다.1행은 모든 값이 1이고, 2행부터는 특별한 규칙이 생긴다.화살표로 표시해 놓았듯 0열의 값은 이전 행의 1열의 값이고,9열의 값은 이전 행의 8열의 값임을 알 수 있다.또한 가운데 값들은 예를들어 3행 3열이라고 하면, 그 값은 2행2열과 2행4열의 값의 합임을 알 수 있다.이제 타뷸레이션으로 풀어보자 n=int(input())cache = [[0]* 10 for _ in range(101)]for i in range(1,101): for j i..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLq0pb%2FbtsIee9TREr%2FsxT6J7UzCBnKK0AXUtFrQ1%2Fimg.png)
https://www.acmicpc.net/problem/11726규칙을 먼저 찾아보자본인은 A4용지에 그려가며 규칙을 찾아보았다.즉, 전에 풀었던 내용과 같은 방식이다.https://koreatstm.tistory.com/148 [백준/Python] 2748:피보나치 수 2https://www.acmicpc.net/problem/2748n=int(input())def func(n): if n==0: return 0 if n==1: return 1 else: return func(n-1)+func(n-2)print(func(n))시간초과가 난다.캐싱을 안해서 오래걸리고, 시간복잡도도 엄청 높기에 시간초과가koreatstm.tistory.com이처럼 f(n) = f(n-1) + f(n-2)의 규칙이다.이제..
https://www.acmicpc.net/problem/11051초기코드n, k = map(int,input().split())def fun(n,k): if k==n or k==0: return 1 else: return fun(n-1,k-1)+fun(n-1,k)print(fun(n,k)%10007)시간초과난다재귀(메모이제이션)import sysn, k = map(int,input().split())sys.setrecursionlimit(10**7)cache = [[0]*1001 for _ in range(1001)]def fun(n,k): if cache[n][k]: # 0이 아닌 수라면 return cache[n][k] if k==n ..
https://www.acmicpc.net/problem/2748n=int(input())def func(n): if n==0: return 0 if n==1: return 1 else: return func(n-1)+func(n-2)print(func(n))시간초과가 난다.캐싱을 안해서 오래걸리고, 시간복잡도도 엄청 높기에 시간초과가 나는 것이다,우리는 중간저장인 캐싱을 사용해야한다.타뷸레이션n=int(input())cache = [0] * 100for i in range(100): if i==0: cache[i]= 0 if i==1: cache[i]= 1 else: cache[i]= cache[..