본문 바로가기

알고리즘/동적프로그래밍3

피보나치 수열 www.acmicpc.net/problem/2747 2747번: 피보나치 수 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된 www.acmicpc.net 피보나치 수는 너무나 유명하기때문에 점화식을 알면 쉽게 계산을 할 수 있다. F0 = 0 F1 = 1 Fn = Fn-1 + Fn-2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import java.util.*; class Main { public static int fibo(int n) { if(n 2020. 10. 29.
2 x n 타일링 programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 �� programmers.co.kr 다이나믹 프로그래밍을 이용한다. 효율성을 위해 캐싱을 이용한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution { private static int MOD_NUMBER = 1_000_000_007; private int getTiles(int n, int[] tiles) { if (n 2020. 9. 7.
타겟넘버 programmers.co.kr/learn/courses/30/lessons/43165?language=java 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 배열을 순회하면서 인덱스를 증가시킨다. 내부의 값이 타겟넘버와 동일하면 count증가 해당하는 값이 나올때까지, 재귀적으로 더하거나 뺀다. 123456789101112131415class Solution { public int solution(int[] numbers, int target) { re.. 2020. 9. 6.