[Node.js_6기 본캠프] Today I Learned_0819
2024. 8. 19. 21:14ㆍ[Node.js_6기 본캠프 TIL]
▶ 알고리즘 코드카타(JavaScript) - 최대공약수와 최소공배수
1) 주어진 코드
function solution(n, m) {
var answer = [];
return answer;
}
2) 조금 슬픈 시간
최대공약수는 큰 수를 작은 수로 나누었을 때, 나머지가 0으로 떨어지면 작은 수가 곧 최대 공약수라는 것까지만 기억이 났다. 아주 먼 옛날... 수학을 좀 더 열심히 공부할걸...
그래도 for문에 if문과 Math.min() Math.max()를 써서 어떻게든 굴리면
function solution(n, m) {
var answer = [];
let Maxnum = Math.max(n, m)
let Minnum = Math.min(n, m)
if(Maxnum % Minnum === 0){
return Minnum
}else{
for(let i=1; // 오... 여기부터 뭔가 잘못된 것을 느꼈다.
}
return answer;
}
될 리가 없었다. 의식의 흐름대로 코드를 짜다가 for문에 넣을 조건을 두고 5분 정도 화면만 응시하는 시간을 가졌다.
3) 풀이
언젠가 배웠던 유클리드 호제법을 쓰면 쉽게 해결되었다.
큰 수를 a, 작은 수를 b라고 할 때, a를 b로 나누었을 때 0이 되면 b가 최대공약수이다. 그렇지 않은 경우 b를 a%b(a를 b로 나누었을 때 남는 나머지 값)로 0이 될 때까지 나누기를 반복해준다. 최소공배수는 a*b/최소공약수 를 해주면 쉽게 구할 수 있다. 이걸 코드로 정리해보면 하기와 같이 정리된다.
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)];
}
끝까지 Math.max와 Math.min 처리를 하려다가 화살표 함수와 삼항연산자를 쓰는 게 더 쉽다는 걸 발견하고 작은 눈물을 흘렸다. 습관적으로 for문과 if문으로 해치우려고 하는 습관이 있는데, 화살표 함수와 삼항연산자를 더 적극적으로 써봐야겠다.
'[Node.js_6기 본캠프 TIL]' 카테고리의 다른 글
[Node.js_6기 본캠프] CH 2. 개인과제 트러블 슈팅_0821 (0) | 2024.08.21 |
---|---|
[Node.js_6기 본캠프] Today I Learned_0820 (0) | 2024.08.20 |
[Node.js_6기 본캠프] Today I Learned_0816 (0) | 2024.08.16 |
[Node.js_6기 본캠프] Today I Learned_0814 (0) | 2024.08.14 |
[Node.js_6기 본캠프] Today I Learned_0813 (0) | 2024.08.13 |