본문 바로가기
728x90

알고리즘339

[Python] 백준 1309 동물원 https://www.acmicpc.net/problem/1309 1309번: 동물원 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. www.acmicpc.net 문제 해결 뭔가 점화식 같은 느낌이 드므로 dp를 이용해야할 것 같다. dp[1] = 3 dp[2] = 7 dp[3] = 17 dp[4] = 41 (예제 입출력에 존재) 뭔가 dp[n] = 2*dp[n-1] + dp[n-2] 처럼 보이는데... 논리적으로 설명을 못하겠다... 한번 시험해 봤는데 n = int(input()) if n == 1: print(3) elif n ==2: print(7) else: dp = [0 for _ in range(n+1)] dp[1] = 3 dp[2] = 7 for i in range(3,n+1.. 2022. 12. 25.
[Python] 백준 15998 1,2,3 더하기 3 https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 문제해결 DP를 공부했으면 굉장히 쉽게 풀었을 수 있다. n을 숫자 1,2,3의 합으로 나타내는 방법의 수를 dp[n]이라고 하면, dp[n] = dp[n-1] + dp[n-2] + dp[n-3] 왜냐하면 n-1를 숫자 1,2,3의 합으로 나타낸 후 숫자 1을 더한 것의 개수는 dp[n-1]과 동일 n-2를 숫자 1,2,3의 합으로 나타낸 후 숫자 2를 더한 것의 개수는 dp[n-2]과 동일하며 n-3을 숫자 1,2,3의 합으로 나타낸 후 숫자 3.. 2022. 12. 25.
[Python] 백준 1699 제곱수의 합 https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 문제해결 dp를 이용해야겠다라는 생각이 든다! - y를 제곱수의 합으로 표현할 때 최소개수를 dp[y]라고 하고 x를 y보다 작은 제곱수라고 가정하면 dp[y] = min(dp[y], dp[y-x] + 1) 만약 어떤 수 y가 제곱수이면 dp[y] = 1 인 것이 명백하므로 먼저 제곱수는 dp[y] = 1을 고정시키자. for 문을 쓰면 될 것 같은데? co.. 2022. 12. 25.
[Python] 백준 2225 합분해 https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 해결 - 숫자 n을 k개의 숫자로 나타내는 개수를 어떻게 구할 것인가? - 숫자에 0을 포함한다는 것은 것을 주의하자. - 잘 모르겠으면 숫자 1 부터 귀납적으로 한 번 해보자! - 1을 1개 숫자로 1 = 1 (1개), 1을 2개 숫자로 1= 1 + 0 = 0 + 1 (2개) 1 = 1 + 0 + 0 = 0 + 1 + 0 = 0 + 0 + 1 (3개)... - 2=2 (1개) 2= 2+0 = 1+1 = 0 +2 (3개) ... 표로 정리를 하면 k \ n n = 1 n=2 n=3 k = 1 (모든 값이1) 1 1 1.. 2022. 12. 24.
728x90