본문 바로가기

recursive

(2)
[Programmers] 43165번 - 타켓 넘버 1. 문제 파악문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43165문제 정의: 주어진 숫자의 +/- 수의 합으로 타켓 넘버를 만족하는 경우의 수를 구해라.문제의 제약 파악 (입력값 크기, 상수 조건)주어지는 숫자의 개수는 2개 이상 20개 이하입니다.각 숫자는 1 이상 50 이하인 자연수입니다.2. 문제 풀이1. 브루트 포스와 입력 크기에 따른 시간 복잡도 계산완전 탐색시 경우의 수는 2^(주어진 숫자의 개수)이다. 따라서 numbers.length = 20이므로 최대 2^20 = 1024^2 ≃ (10^3)^2 = 10^6 각 수는 +/-로 분기해서 그래보면 다음과 같다. 이는 그래프의 한 형태의 이진 트리로 표현할수있다. 깊이^..
[Leetcode] 509번 - 피보나치 수열 1. 문제 파악문제 링크: https://leetcode.com/problems/fibonacci-number/description/문제 요구사항: 피보나치 수열을 구현해라.시간복잡도: 입력 크기가 30개이므로 (2^10)^3=1,024^3≈(10^3)^3≈10^9이다. 따라서 10^8을 초과하므로 통과를 못할수도 있다.2. 문제 풀이1. 브루트 포스로 문제 풀이 도출피보나치 수열은 특정 숫자를 구하기 위해서 그 한칸 앞에 있는 값과 두칸 앞에 있는 값을 더해야한다. 따라서 피보나치 수열의 점화식은 f[i] = f[i-1] + f[i-2]이다. 위의 공식에 따르면, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...이다. 만일, 단순하게 분할 정복 기법을 사용해서 10번째 피보나치 ..