알고리즘, 자료구조
-
[Javascript] Codility Lesson10 - CountFactors알고리즘, 자료구조/Codility 2022. 8. 20. 19:45
문제: https://app.codility.com/programmers/lessons/10-prime_and_composite_numbers/count_factors/ 문제 요약 N = D * N 이 성립하면 D는 N의 인수다. N이 주어졌을 때 N의 인수 개수를 구하여라 N의 범위는 1 ~ 2,147,483,647이며, N과 D는 자연수이다. 풀이 function solution(N) { let result = 0; const M = Math.sqrt(N); let sqrtInt = Math.floor(M); while (sqrtInt > 0) { let remain = N % sqrtInt; result = remain === 0 ? result + 1 : result; sqrtInt--; }; ..
-
[Javascript] Codility Lesson6 - Triangle알고리즘, 자료구조/Codility 2022. 8. 15. 14:32
문제: https://app.codility.com/programmers/lessons/6-sorting/triangle/ 문제 요약 길이가 N인 배열 A가 주어진다. (P,Q,R)이 0 A[R], A[Q] + A[R] > A[P], A[R] + A[P] > A[Q] 을 충족하면 삼각관계(triangular)라고 한다. 배열 A에서 삼각관계를 충족하는 값들이 있으면 1, 없으면 0을 반환한다. N의 범위는 0 ~ 100,000 이다. 배열 A의 요소 범위는 −2,147,483,648 ~ 2,147,483,647 이다. 풀이 function solution(A) { let result = 0; // 내림차순 정렬 A.sort((a, b) => b - a); for (let i = 0; i < A.lengt..
-
[Javascript] Codility Lesson1 - BinaryGap알고리즘, 자료구조/Codility 2022. 7. 19. 02:22
문제: https://app.codility.com/programmers/lessons/1-iterations/binary_gap/ 문제 요약 양의 정수인 N을 이진수로 나타냈을 때, 양 끝이 1로 이루어진 연속되는 0을 BinaryGap이라 한다. 가장 긴 BinaryGap의 길이를 구하되, BinaryGap이 없으면 0을 리턴한다. 10001001의 가장 긴 BinaryGap은 3이며, 100000인 경우 BinaryGap이 없기 때문에 0을 반환한다. 정수 N의 범위는 1 ~ 2,147,483,647이다. 풀이 function solution(N) { // 정수 N을 이진수로 변환한다 let binaryBit = (N).toString(2); let result = 0; let index = [];..
-
[Javascript] Codility Lesson9 - MaxDoubleSliceSum알고리즘, 자료구조/Codility 2022. 7. 11. 22:21
문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_double_slice_sum/ 문제 요약 길이가 N인 배열 A가 주어지며 N의 범위는 3 ~ 100,000이다. 트리플렛 (X, Y, Z)가 주어지며 (0 ≤ X < Y < Z < N) 이는 A[X + 1] + A[X + 2] + ... + A[Y − 1] + A[Y + 1] + A[Y + 2] + ... + A[Z − 1]를 의미한다. 모든 경우에서 최대합을 구하여라 풀이 function solution(A) { let forward = new Array(A.length).fill(0); let backward = new Array(A.length).fill(0);..
-
[Javascript] Codility Lesson9 - MaxSliceSum알고리즘, 자료구조/Codility 2022. 6. 22. 22:00
문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/ 문제 요약 정수로 구성된 배열 A가 주어졌을 때, 합산 결과가 가장 큰 연속 구간의 합을 구하여라. 풀이 function solution(A) { let maximum = A[0]; // 누적값을 저장할 변수 accum let accum = A[0]; for(let i = 1; i < A.length; i++) { // 누적값과 A[i]의 합이 A[i]보다 작으면 accum을 A[i]로 변경한다 accum = accum + A[i] < A[i] ? A[i] : accum + A[i]; // accum이 maximumq보다 크면 maximum을 acc..
-
[Javascript] Codility Lesson9 - MaxProfit알고리즘, 자료구조/Codility 2022. 6. 21. 21:33
문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/ 문제 요약 N개의 정수를 갖는 배열 A가 주어지며, 각 요소는 주식의 일별 가격을 나타낸다. 주식을 사고 팔았을 때 얻을 수 있는 최대 이익을 반환하고, 만약 이익을 내는 경우가 없다면 0을 반환한다. P는 주식을 산 날, Q는 주식을 판 날이며 0 0 ? profit : 0; return profit; }
-
[Javascript] Codility Lesson 8 - Dominator알고리즘, 자료구조/Codility 2022. 6. 13. 20:13
문제: https://app.codility.com/programmers/lessons/8-leader/dominator/ 문제 요약: N개의 정수로 이루어진 배열 A가 주어진다. N의 범위는 0 ~ 100,000이다. 배열 A의 각 요소의 범위는 -2,147,483,648 ~ 2,147,483,648이다. 배열 A에서 절반 이상을 차지하는 정수(dominator)의 인덱스 중 하나를 반환하여라. 배열 A에서 절반 이상을 차지하는 정수가 없다면 -1을 반환한다. 시도 1: function solution(A) { let stack = []; for (let i = 0; i < A.length; i++) { // stack에 순서대로 정수를 넣고 stack.push(A[i]); // 2개 이상의 정수가 s..
-
[Javascript] Codility Lesson 7 - Fish알고리즘, 자료구조/Codility 2022. 6. 8. 20:44
문제: https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/ 문제 요약: 함수 인자로 A, B 배열이 주어진다. (A와 B의 길이는 동일) 배열 A 요소는 물고기의 크기를 나타내며 범위는 0 ~ 1,000,000,000이다. 숫자가 클수록 큰 물고기이다. 배열 B 요소는 0, 1로 이루어져 있고 물고기의 방향을 나타낸다. 0은 상류, 1은 하류로 움직이는 것을 의미한다. 큰 물고기가 작은 물고기를 잡아먹는다. 최종까지 살아남는 물고기의 수를 구하여 반환한다. 시도 1 function solution(A, B) { // 모두 같은 방향으로 움직인다면 모든 물고기가 살 수 있다. if (B.indexOf(0) === -1 || B.in..