13. 피보나치 수열 (Fibonacci Numbers) Codility Lesson 한국어 정리본 (JavaScript ver.)
피보나치 수열(Fibonacci Numbers)이란?피보나치 수열은 다음과 같이 정의된다.F(0) = 0F(1) = 1F(n) = F(n-1) + F(n-2) (n ≥ 2)예제:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ...1. O(2ⁿ) 시간 복잡도의 재귀 방식 (비효율적)JavaScript 코드:function fibonacci(n) { if (n 이 방식은 너무 느려서 n이 커질수록 사용할 수 없다.2. O(n) 시간 복잡도의 동적 프로그래밍 방식JavaScript 코드:function fibonacciDP(n) { let fib = new Array(n + 1).fill(0); fib[1] = 1; for (let i = 2; i 이 방식..
10. 소수와 합성수 (Prime and Composite Numbers) Codility Lesson 한국어 정리본 (JavaScript ver.)
소수(Prime Number)와 합성수(Composite Number)소수(Prime Number) 는 1보다 크고, 자기 자신과 1을 제외한 약수가 없는 수 를 의미한다.합성수(Composite Number) 는 1과 자기 자신 이외에도 다른 약수를 가지는 수 를 의미한다.예를 들어, 2, 3, 5, 7, 11, 13 등은 소수이며, 4, 6, 8, 9, 10 등은 합성수이다.1. O(√n) 시간 복잡도의 약수 개수 구하기n의 약수를 찾는 기본적인 방법은 1부터 n까지 모든 수를 확인하는 것 이다. 하지만 n의 약수는 대칭성을 가지므로, √n 까지만 탐색해도 전체 약수를 구할 수 있다.JavaScript 코드:function countDivisors(n) { let count = 0; let..
9. 최대 슬라이스 문제 (Maximum Slice Problem) Codility Lesson 한국어 정리본 (JavaScript ver.)
최대 슬라이스 문제란?주어진 정수 배열 A = [a₀, a₁, ..., aₙ₋₁] 에서 연속된 부분 배열(슬라이스, Slice) 중 합이 최대가 되는 구간을 찾는 문제 이다. 즉, 두 인덱스 p, q (p ≤ q)를 선택하여 A[p] + A[p+1] + ... + A[q] 값이 최대가 되는 경우 를 찾는다.예를 들어, 다음과 같은 배열이 있을 때:A = [5, -7, 3, 5, -2, 4, -1];위 배열에서 최대 합을 갖는 부분 배열은 [3, 5, -2, 4]이며, 합은 10이다.1. O(n³) 시간 복잡도의 비효율적인 방법모든 가능한 슬라이스를 탐색하여 최댓값을 찾는 방법이다.JavaScript 코드:function slowMaxSlice(A) { let n = A.length; let r..