Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- JavaScript
- 파이썬 for
- 파이썬 enumerate
- tanstack query
- 내일배움캠프
- Next 팀 프로젝트
- 파이썬 for in
- 한글 공부 사이트
- js
- useState
- 리액트 프로젝트
- 내일배움캠프 프로젝트
- 타입스크립트
- 코딩테스트
- 내배캠 프로젝트
- typeScript
- 프로그래머스
- 내일배움캠프 최종 프로젝트
- 파이썬 slice
- React Hooks
- 자바스크립트
- 파이썬 replace
- 타입스크립트 리액트
- 리액트 훅
- 파이썬 반복문
- 파이썬 딕셔너리
- 파이썬 list
- 리액트
- 타입스크립트 props
- REACT
Archives
- Today
- Total
sohyeon kim
[JS] 프로그래머스 : 최대공약수와 최소공배수, 유클리드 호제법 본문
728x90
📝 문제
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
🫠 나의 풀이
function solution(n, m) {
const gcd = (a, b) => (a % b === 0 ? b : gcd(b, a % b));
const lcm = (a, b) => (a * b) / gcd(a, b);
return [gcd(n, m), lcm(n, m)];
}
유클리드 호제법
n > m 일 때,
n 을 m 으로 나눈 나머지를 r 이라 한다. gcd(n, m) = gcd(m, r) 과 같다.
r 이 0 이라면 그 때의 m 이 최대공약수다
n = 24, m = 16 이라면 gcd(24, 16) = gcd(16, 8) = gcd(8, 0)
gcd = 8
n < m 이라면, 처음에 m 을 n % m === n 으로 나눈다.
최대공배수는 두 수를 곱한 값을 최대공약수로 나눈 값과 같다.
🧞♂️ 다른 풀이
// 약수 구하기
function solution(n, m) {
let gcd = 1;
for (let i = 2; i <= Math.min(n, m); i++) { // n, m 중 작은 수를 골라 기준을 잡는다.
if (n % i === 0 && m % 2 === 0) gcd = i;
// i 를 하나씩 키우며 n, m 둘 다 나머지를 0으로 갖는 수가 나올 때 gcd 에 값을 넣는다.
}
return gcd;
}
// 최소공배수 구하기
function solution(n, m) {
let lcm = 1;
while (true) {
if (lcm % n === 0 && lcm % m === 0) break;
// lcm 을 하나씩 키우며 lcm 을 n, m 으로 나눴을 때 둘 다 나머지가 0이라면 반복문을 멈춘다.
lcm++;
}
return lcm; // 최대공약수를 찾은 상태라면 n * m / gcd 를 해줘도 된다.
}
🔗 https://school.programmers.co.kr/learn/courses/30/lessons/12940
728x90
반응형
'Coding Test' 카테고리의 다른 글
[Python] 숫자 맞히기 게임 (0) | 2024.01.31 |
---|---|
[Python] 백준 : 알파벳 찾기 10809 (0) | 2024.01.28 |
[Python] 백준 : 알람 시계 2884 (1) | 2024.01.10 |
[JS] 코딩테스트 : 소수 찾기 (1) | 2024.01.04 |
[JS] 코딩테스트 : 문자열(배열) 뒤집기 reverse(), for문 거꾸로 돌기 (0) | 2024.01.04 |