Count Array Pairs Divisible by K
Problem Solving 2022. 2. 20. 21:04

Count Array Pairs Divisible by K 목적 integer의 배열이 nums가 주어진다. 주어진 nums에서 2개의 pair를 선택해서 곱한 결과가 k로 나뉘어지는 경우가 몇 번인가? 단, pair가 (1,2)이면 (2,1)과 동일하다. 접근 방법 Brute force 접근 가장 쉬운 접근은 모든 경우의 수를 곱샘 하는 것이다. 만약 nums = [1,2,3,4,5], k = 2 가 주어지면, [1,2],[1,3],[1,4],[1,5],[2,3],[2,4],[2,5],[3,4],[3,5],[4,5] 를 만들 수 있고 이중에서 2로 나뉘어 지는 것은 2,3,4,5,6,8,10,12,15,20 중에서 2,4,6,8,10,12,20이 된다. 모든 경우의 수를 따지고 k로 % 연산을 진행할 ..

Max Points on a Line
Problem Solving 2021. 6. 27. 23:33

Max Points on a Line 문제 내용 어떤 1차 방정식의 선분을 그었을 때 해당 선을 지나가는 가능 많은 Points의 갯수를 구하라. 접근 방법 지극히 수학적인 접근이 필요하다. 우선 기본적인 1차 방정식을 생각해 보자. $$ y = ax + b$$ 여기에서 a는 기울기 b는 절편이라고 생각하면 된다. 기울기는 다음과 같이 나타낼 수 있다. y의 변화량을 x의 변화량으로 나눈 값이 된다. $$ slope = (y2 - y1) / (x2 - x1) $$ 이것을 3개의 Point가 한개의 선을 지나가는가? 라는 접근 방법은 아래와 같이 나타낼 수 있다. $$ (y2 - y1) = (x2 - x1) * slope + bias $$ 그런데 위 수식에서 bias는 두점에 대한 상대라고 생각했을 때 b..

Greatest common divisor (gcd) 최대 공약수 구하기, Euclidean algorithm 유클리드 알고리즘
Problem Solving 2021. 6. 27. 21:46

사람이 최대 공약수를 구하는 방법은 다음과 같은 계산 방식으로 해결을 한다. 그럼 프로그램 적으로는 어떻게 접근 하는 것이 좋은가? 모든 경우의 수를 계산 한다. 최대공약수는 기본적으로 a와 b를 동시에 나눌 수 있는 가장 큰 수라는 전제가 있다. 그렇기 때문에 a와 b중 작은 수를 기준으로 모든 수를 나누어 보면 된다. function gcd_linear(a, b) { let min = Math.min(a, b); for (let i = min; 0