일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 네이버
- 파이썬
- 웹
- DP
- Spring
- servlet
- 자바스크립트
- was
- 비동기
- JSP
- Service
- Spring MVC
- 다이나믹 프로그래밍
- 다이나믹프로그래밍
- 알고리즘
- controller
- 부스트코스
- Callback
- response
- 서블릿
- DI
- Promise
- 면접
- IOC
- 기술면접
- 백준
- Spring Framework
- 코딩테스트
- 부스터2기
- request
- Today
- Total
목록DP (6)
Sh개발일기

https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되 www.acmicpc.net 전형적인 다이나믹 프로그래밍 문제이다. n에 따라 규칙에 맞게 문제를 해결하다보면 점화식을 얻을 수 있다. 지켜야 하는 규칙은 다음과 같다..

https://www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수의 길이 N이 주어졌을 때, 오르막 수의 개수를 구하는 프로그램을 작성하시오. 수는 0으로 시작할 수 있다. www.acmicpc.net 전형적인 다이나믹 프로그래밍 문제로, n에 따른 규칙을 나열하다 보면 점화식을 얻을 수 있는 문제이다. n=1 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 -> 10가지 이를 DP배열로 나타내면 다음과 같다. [1,1,1,1,1,1,1,1,1,1..

https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 www.acmicpc.net 전형적인 다이나믹 프로그래밍 문제이다. n=1부터 차근차근 경우를 구해보면 점화식을 얻을 수 있다. n=1 : 1 -> 1가지..

https://www.acmicpc.net/problem/11727 전형적인 다이나믹프로그래밍 문제이다. 지난번 풀었던 문제와 비슷한 문제로, n에 따라 문제를 풀다 보면 점화식의 규칙성을 찾을 수 있는 문제이다. n=1 -> 1개 n=2 -> 3개 n=3 -> 5개 다음과 같은 식으로 전개가 가능하다. 조금 더 확인을 위해 n=4 를 구해보면 11개가 나오는 것을 확인할 수 있다. 따라서 점화식은 다음과 같이 세워진다. DP[N] = DP[N-1] + 2*DP[N-2] 검산을 위해 8과 12를 구해보면 각각 171과 2731에 일치함을 알 수 있다. 이를 파이썬 코드로 나타내면 다음과 같다. (10007로 나눈 나머지임을 주의한다) 1 2 3 4 5 6 7 8 9 n = int(input()) #dp[..

전형적인 다이나믹 프로그래밍 문제이다. 1x2, 2x1의 타일을 가지고 2xn의 타일을 채우는 경우의 수를 구하는 문제이다. n=1부터 그림을 그려가며 갯수를 세어나가면 쉽게 규칙을 찾을 수 있다. n=1 -> 1가지 n=2 -> 2가지 n=3 -> 3가지 위의 모양을 보면 n=3인 경우, 1과 2의 모양들의 결합으로 이루어지는것을 볼 수 있다. 조금 더 정확한 확인을 위해 n=4,5인 경우까지 확인해보면 다음과 같은 규칙성을 찾을 수 있다 DP[n] = DP[n-1]+DP[n-2] 이를 코딩으로 나타내면 다음과 같다. (10007로 나눈 나머지로 표시해주어야 한다) 1 2 3 4 5 6 7 8 n = int(input()) dp = [0, 1, 2] for i in range(3, n+1): dp.ap..

전형적인 DP문제로 10 -> 1로 만드는 것 보다 1 -> 10을 가면서 최단거리를 찾는 방법으로 문제를 해결할 수 있다. 힌트의 나와있는 10의 경우를 예로 들면 1 -> 10까지 가는 최단 방법을 배열로 구하는 것이다. 이때 10 -> 1로 가는 경우를 예로 들어보자 고려해야할 조건은 다음과 같다 X가 3으로 나누어 떨어지면, 3으로 나눈다 X가 2로 나누어 떨어지면, 2로 나눈다 1을 뺀다 1 -> 10을 가기 위해 1부터 2, 3 차근차근 진행해 나가보자 1 -> 2를 가기 위해선 3번 조건을 통해 1을 더해 갈 수 있다. 즉, DP배열을 사용하면 [0,0,1]이 되는것이다.(index의 편의를 위해 0번째 index에는 0을 추가해주었다.) 이때 1은 1에 1을 더하는 연산을 한 번 수행하여 ..