자바스크립트를 공부하면서 프로그래머스 문제를 하나씩 풀어보고 있다.
다른 문제들은 술술 넘어갔는데... 이 문제에서 며칠을 고생했다. 분명 Lv.0인데.... 왜... (자괴감...)
그래도 결국엔 풀어내서 정리하려고 한다!
문제 설명
첫 번째 분수의 분자와 분모를 뜻하는denum1
,num1
, 두 번째 분수의 분자와 분모를 뜻하는denum2
,num2
가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
기
문제를 처음 읽어보았을 땐 마치 초등학교 4학년 문제를 푸는 것만 같았다. 식은 죽 먹기지! 하면서 풀어보는데... 도저히 어떻게 손을 대야할지 모르겠더라. 최소 공배수, 최대 공약수는 아는데 이걸 코드로 적어본 적이 없었기 때문이다!
승
그래도 혼자 이것저것 많이 적어보았다.
전
내가 작성한 코드는 아래와 같다. (최소 공약수 구하기
라고 오타를 내었다..)
최대 공약수를 구하는 코드는 구글링하여 알아냈다. 2개의 자연수의 최대 공약수를 구하는 유클리드 호제법이다.
분명 거의 다 구했는데 console에서 자꾸 [NaN, NaN]
을 출력해냈다.
이 부분에서 막혔기 때문이다. 배열 요소를 추가하는 것은 막히지 않았다. 하지만 적절한 변수를 작성하지 않았기 때문에 자꾸만 NaN
이라고 뜨는 것이었다. 코드 윗 부분에서 let a = denum
이라고 작성했기 때문에 위 코드에서도 denum
대신 a
를 써넣었더니.. 출력되었다!!!!!!!!!!
적당한 변수를 쓰기. 이것이 내가 며칠을 고생하게 만든 원인이었다.
결
다른 사람들의 풀이를 보고 다시 간결하게 작성해보았다.
// 최대 공약수 구하기
function cal_gcd(a, b) {
return a % b === 0 ? b : cal_gcd(b, a % b)
}
function solution(denum1, num1, denum2, num2) {
let denum = denum1 * num2 + denum2 * num1;
let num = num1 * num2;
let gcd = cal_gcd(denum, num);
// 최대 공약수를 분자 분모에 나누고 배열에 넣기
return [denum / gcd, num / gcd]
}
자괴감이 더 몰려왔다. 어쩜... 같은 코드를 이렇게 깔끔하게 쓸 수 있는지... 조금 더 공부하고 노력해야겠다.
안녕하세요 글 잘 봤습니다!! 근데 프로그래머스문제를 블로깅하는거에대해서 저작권 관련해서 출처를 남기거나 주의해야 하는 사항은 없는건가여?