2026/01 23

[코딩테스트/Javascript] 최대공약수(GCD)/최소공배수(LCM)와 유클리드 호제법

코테 빈출 개념인 최대공약수와 최소공배수를 계산하는 방법을 정리해 보겠습니다 최대공약수 = Greatest Common Divisor = GCD최소공배수 = Least Common Multiple = LCM 수학 공식소인수분해를 통해 계산공배수최소공배수의 배수공약수최대공약수의 약수최대공약수공통 소인수, 지수는 최소최소공배수모든 소인수, 지수는 최대 12 = 2² × 318 = 2 × 3² GCD = 2 × 3 = 6LCM = 2² × 3² = 36 최대공약수약수 이용→ 두 수의 공약수 중 최대 값을 구한다 1. i를 1부터 두 수(n, m) 중 더 작은 값(min)의 제곱근까지 증가시키며 순회공약수는 min을 넘을 수 없다. 예를 들어 n = 12, m = 15일 경우 두 수의 공약수는 12를 넘길 수 ..

프로그래머스 2026.01.30

[프로그래머스/Javascript] Lv.1 최소직사각형

https://school.programmers.co.kr/learn/courses/30/lessons/86491 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✓ 문제 다양한 명함의 크기를 모두 수납 가능한 지갑의 크기 (가로 X 세로)를 구하라단, 명함의 가로 세로를 변경해서 수납할 수 있음 ✓ 풀이과정 1. 명함들의 가로, 세로 값을 배열(sizes)로 전달받으면 작은 것을 가로(w)로 큰 것을 세로(h)로 정렬2. 가로에서 가장 큰 값과 세로에서 가장 큰 값을 찾아서 저장(walletSize)하고 가로 x 세로를 계산하여 지갑의 크기 반환 1번의 정렬 과정을 거치는 이유는 위와 같은 다양한 크기의 사..

[코딩테스트/Javascript] 약수와 약수 찾기

코딩테스트를 풀면서 약수를 찾아야하는 문제가 자주 출제되어 활용할 수 있는 코드를 정리했습니다 약수란 어떤 수를 나누어 떨어지게 하는 수를 의미합니다1의 약수 → 110의 약수 → 1, 2, 5, 10100의 약수 → 1, 2, 4, 5, 10, 20, 25, 50, 100 n의 약수는 a x b 의 형태로 쌍을 이루기 때문에 n의 모든 약수를 찾아야 한다면 n의 제곱근까지만 확인한다면 n의 모든 약수를 찾을 수 있습니다 위의 예시에서 n이 36이라면, 1부터 n의 제곱근인 6까지만 확인한다면 n = a x b의 형태에서 b = n / a 계산으로 함께 구할 수 있습니다 단, 6x6과 같이 두 약수가 동일한 경우라면 중복이 발생하기 때문에 이 경우에는 중복 없이 한번만 약수를 카운트하는 조건이 필요..

프로그래머스 2026.01.28

[프로그래머스/Javascript] Lv.1 기사단원의 무기

https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✓ 문제 기사들은 번호가 지정되어 있으며(1~number) 기사는 자신의 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매단, 공격력 제한수치(limit)가 있으며 이거보다 크면 협약기관에서 정한 공격력(power)을 가진 무기를 구매무기 공격력 1 당 철 1kg로 계산해서 모든 기사들의 무기를 제작하는데 필요한 철 무게를 반환 ✓ 풀이과정 1. 모든 기사번호(1~number)를 순회하며 기사번호의 약수의 개수를 저장하여 구매할 무기의 공격력..

[프로그래머스/Javascript] Lv.1 체육복

https://school.programmers.co.kr/learn/courses/30/lessons/42862 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✓ 풀이과정 1. 포함 여부 및 삭제를 쉽게 사용하기 위해 lost와 reserve를 Set으로 변환해서 저장2. 체육복을 도난당한 학생 번호(lostIndex)를 순회하며 해당 번호(i)가 여벌 체육복이 있는 학생 번호(reserveIndex)에도 있는 번호라면 여벌 체육복을 보유했지만 도난 당한 학생이기 때문에 본인의 체육복 한벌만 보유하고 있는 학생이므로 lostIndex와 reservIndex에서 제거3. 체육복을 도난당한 학생 번호(lostI..

[프로그래머스/Javascript] Lv.1 폰켓몬

https://school.programmers.co.kr/learn/courses/30/lessons/1845 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✓ 풀이과정 선택할 수 있는 포켓몬의 수(canPick)과 포켓몬 종류를 중복없이 저장(kinds)해두고 둘 중 더 적은 수를 반환합니다Set으로 중복을 제거해서 간단하게 해결할 수 있었습니다 ✓ 최종코드function solution(nums) { let canPick = nums.length / 2; let kinds = new Set(nums).size; return canPick

[프로그래머스/Javascript] Lv.1 덧칠하기

https://school.programmers.co.kr/learn/courses/30/lessons/161989 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✓ 풀이과정 1. 현재 벽 위치(currentIndex)를 선언해두고 칠해야 하는 벽(section)을 순회하면서 현재 위치가 칠해야 하는 벽의 인덱스보다 작거나 같다면 nextWall은 칠해야 하는데 안 칠해진 벽이라고 판단하고 m만큼 칠한 후의 위치를 다시 저장하고 카운트 추가2. 모든 칠해야 하는 벽을 체크한 후 최종 카운트 반환 ✓ 최종코드function solution(n, m, section) { let answer = 0; let ..

[프로그래머스/Javascript] Lv.1 옹알이

https://school.programmers.co.kr/learn/courses/30/lessons/133499 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✓ 풀이과정 1. 한 단어의 알파벳 하나씩 확인하면서 임시 변수(temp)에 추가 저장2. 말할 수 있는 단어에 temp가 포함되어 있다면 연속으로 같은 단어를 방지하기 위해 before에 기억해두고 temp를 초기화3. 한 단어의 모든 알파벳을 확인했을 때 temp에 남아있는 알파벳이 없을 때만 말할 수 있는 단어로 판단하여 개수 카운트 function solution(babbling) { let answer = 0; let canSayWord..

[프로그래머스/Javascript] Lv.1 소수 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/12921 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ✓ 풀이과정 처음 시도 했던 과정은 아래와 같습니다 1. 2부터 제곱근까지 확인하며 나누어 떨어지는 수가 없으면 소수라고 판별하여 카운트 추가2. 2부터 n까지 돌면서 1번 반복하며 최종 소수 카운트 반환 function solution(n) { let answer = 0; const isPrime = (num) => { for (let i = 2; i * i 위 방법으로 시도했을 경우 일부 항목에서 시간초과가 발생하여 더 효율적으로 소수..

[코딩테스트/Javascript] 소수 찾기와 에라토스테네스의 체

소수 판별 문제를 풀다가 시간초과에 걸려 방법을 찾아보던 중 에라토스테네스의 체 라는 알고리즘을 알게 되었습니다 자연수의 분류 - 1은 소수도 합성수도 아님- 소수는 1과 자기자신만을 약수로 가지는 수 = 약수가 2개인 수- 합성수는 1을 제외하고 소수가 아닌 수 ✓ 기본적인 소수 찾기2부터 √n까지 확인했을 때 n % i === 0 인 수가 하나라도 있으면 n은 합성수→ n은 √n 이하의 약수를 가지면 합성수 const isPrime = (n) => { for (let i = 2; i * i n = 36 일 때 n의 약수를 i * i n이 합성수라면 n = a x b의 형태에서 a 또는 b 중 하나가 반드시 √n 이하에 존재하기 때문 위 방법은 하나의 수에 대해서 소수인지 확인할 때는 ..

프로그래머스 2026.01.26