본문 바로가기

Algorithm/Dynamic Programming69

[파이썬] 백준 11726, 11727 : 2xn 타일링, 2xn타일링 2 (실버3) [파이썬] 백준 11726, 11727 : 2xn 타일링, 2xn타일링 2 (실버3) 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 문제 풀이 방향성 생각 계단 오르기 문제와 똑같다. ㅣ1칸, =,ㅁ 두칸이라교 생각하면 된다 2xn 타일링 문제에서는 두 칸을 오르는 방법이 한가지, 2xn 타일링 2 문제에서는 두 칸을 .. 2023. 6. 1.
[파이썬] 백준 1003 : 피보나치 함수 (실버3) [파이썬] 백준 1003 : 피보나치 함수 (실버3) 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 문제 풀이 방향성 생각 DP문제, 규칙을 나열해보면 알겠지만 0이 호출되는 횟수는 이전 피보나치 수열의 값이다. 다음의 코드로 확인해보면 for i in range(15): if i==0 : print(1,0) else : print(an[i-1],an[i]) 0이 호출되는 횟수는 n==0을 제외하고 피보나치 수열의 이전 값을 따라가는 것을 볼 수 있다. 1 0 0 1 1 1 1 2 2 3 3 5 5 8 8 13 13 21 21 34 34 55 55 89 89 144 144 233 233 377 전체코드 .. 2023. 6. 1.
[파이썬] 백준 9095 : 1, 2, 3 더하기제목 (실버3) [파이썬] 백준 9095 : 1, 2, 3 더하기제목 (실버3) 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 문제 풀이 방향성 생각 DP 문제이므로 초기 값들 몇개를 찾아서 규칙을 찾는다 규칙을 찾아보면 최근에 나온 3가지 수를 모두 더하면 다음 경우의 수가 나오는 것을 확인할 수 있다. 5 -> 13, 6->24 어떤 자연수 n을 만들 때 1 2 3으로만 만든다고 했으므로 1+(n-1), 2+(n-2), 3+(n-3), 뒤에 나오는 경우의 수들은 앞에서 이미 구한 값들을 통해서 구할 수 있다. an = [0,1,2,4] for i in range(9): an.append(sum(an[-3:])) t =.. 2023. 6. 1.
[파이썬] 백준 9461 : 파도반 수열 (실버3) [파이썬] 백준 9461 : 파도반 수열 (실버3) 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 문제 풀이 0.방향성 생각 1,1,1,2,2,3,4,5,7,9,12,16,21,28,37 규칙을 찾아보면 an[n]+an[n+4] = an[n+5]를 이룬다. 여러 개의 테스트 케이스가 들어오므로 먼저 DP 계산을 끝낸 후에 답을 출력한다. an = [1,1,1,2,2] for i in range(95): an.append(an[i]+an[-1]) t = int(input()) for i in range(t): n .. 2023. 6. 1.