일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 따라하면서 배우는 C언어
- JavaScript
- graph
- BFS
- dfs
- Cleancode
- 인프런
- BASIC
- Algospot
- 정수론
- sorting
- 따라하며 배우는 C언어
- Algorithm
- 생활코딩
- String
- Python
- server
- php
- web
- 따배씨
- BOJ
- C언어
- greedy
- udemy
- 백준
- C
- programmers
- 종만북
- DP
- Math
- Today
- Total
목록DP (23)
몽상실현개발주의
[BOJ] 11058 / 오르막 수 / Python https://www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net 풀이 BOJ / 10844 / 쉬운 계단 수 와 유사한 문제이다. 쉬운 계단 수 문제와 마찬가지로, 경우의 수를 이차원 배열로 정리하여 결과에 대한 연관성을 구하였다. 0 1 2 3 4 5 6 7 8 9 N = 1 ->1 1 1 1 1 1 1 1 1 1 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ N = 2 ->1 → 2 ..
[BOJ] 10844 / 쉬운 단계 수 / Python www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 처음 시도는 경우의 수가 정해져 있다고 생각하여, N 으로 구하는 점화식을 세우려고 하였다. 하지만 매우 복잡한 점화식이 세워졌고, 그 답은 보기 좋게 오답이 나왔다. 문제를 풀기 위한 생각의 방향은, 숫자의 자리수가 늘어날때 조건이 있고, 그 조건으로 인해 경우가 좁혀져 패턴이 발생한다는 것이다. N = 1 -> 1 2 3 4 5 6 7 8 9 N = 2 -> 10 12 21 23 32 34 43 45 54 56 65 67 76 78 87 89 98 N = 3 -..
[BOJ] 9095 / 1, 2, 3 더하기 / Python www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 풀이 제한된 조건으로 경우의 수를 구하는 문제이다. 경우의 수를 발생 시키는 일정한 규칙을 찾고 규칙에서 점화식을 찾아 해결 하였다. N = 1 -> 1 N = 2 -> 2 N = 3 -> 4 N = 4 -> 7 N = 5 -> 13 위의 규칙으로 구한 점화식은 dp(N) = dp(N-1) + dp(N-2) + dp(N-3) 점화식을 이용하여 Tabluation 으로 문제를 해결 하였다. T = int(input()) for _ in range(T)..
[BOJ] 11727 / 2×n 타일링2 / Python https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 풀이 11726 / 2 X n 타일링 문제에 조건이 추가되었다. N = 1 -> 1 N = 2 -> 3 N = 3 -> 5 N = 4 -> 11 N = 5 -> 21 추가된 조건의 경우의 수는 위와 같았다. 점화식: dp(N) = dp(N-1) + 2*dp(N-2) Tabluation 을 이용한 풀이는 다음과 같다. N = int(input()) dp = [0, 1, 3..
[BOJ] 11726 / 2×n 타일링 / Python https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 풀이 점화식을 사용하는 dp 문제 였다. N = 1 -> 1 N = 2 -> 2 N = 3 -> 3 N = 4 -> 5 N = 5 -> 8 N = 6 -> 13 경우의 수를 구해보니 점화식이 피보나치 수열과 같다는 것을 알 수 있었다. dp(N) = dp(N-1) + dp(N-2) 그래서 처음에는 재귀함수를 이용하여 시도 하였다. N = int(input()) d..
[DP] Memorization 과 Tabulation DP : Dynamic Programing 의 방법은 Memorization 과 Tabulation 이 있다. 1. Memoization Memorization - 기억, 암기. 재귀를 이용하여 값을 위에서부터 계산하기 때문에 하향식 접근(top-down approach) 방식. cache에 값을 기록하여 중복 계산을 방지. # fibonacci def fibonacci(n, memo): if n < 3: memo[n] = 1 return memo[n] # n번째 피보나치값이 memo 에 있을경우 if memo[n]: return memo[n] # n 번째 값을 계산하지 않았을 경우, 재귀호출로 계산 후 Memorization memo[n] = fi..
[BOJ] 1463 / 1로 만들기 / Python www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 풀이 처음 시도는 while 문을 이용한 조건으로 작성 하였다. X = int(input()) cnt = 0 while (1): if X == 1: break if X % 3 == 0: X //= 3 cnt += 1 elif X % 2 == 0: X //= 2 cnt += 1 else: X -= 1 print(cnt) 하지만, 반례인 10 에서 조건에 부합하지 않는 다는것을 생각하였다. 10 -> 9 -> 3 -> 1 이 아닌 10 -> 5 -> 4 -> 2 -> 1 이 나..