오랜만에 이력서를 업데이트를 했다. 준비를 하면서 약 20개정도의 채용공고를 슥하고 훑어봤는데 대부분의 회사들이 코딩테스트를 디폴트로 보는것으로 보였다.
나는 2019년부터 개발을 해왔지만 사실 코딩테스트를 본다고하면 자신감이 좀 사라지는 경향이 있다. 물론 이전 면접볼때도 코딩테스트는 몇번 본적이 있다. 떨어진적도 있고 붙은적도 있지만...
대학교에 다닐때 동기가 추천해준 백준 문제풀이를 풀어봐야겠다라고 생각은 해봤지만 실천을 하지 않았던 과거의 나를 욕해본다.. 그때부터 준비했더라면 더 좋은 기업에 가지 않았을까하고... 나를 더 질책해줬어야지 동환아..
프로그래머스 입문 코스를 따라서 준비를 시작했다.
첫날 문제는 금방 풀었고 2일차 문제를 풀다가 생각지도 못한 문제에 당황했다.
문제는 다음과 같았다.
어...? 입문 2일차에 이런게 나온다고? 라는 생각이 들었다. 약 5분정도 고민해서 나온 방법은 다음과 같다. 너무 멍청했다...ㅋㅋㅋ
while문을 돌려 2로 계속 나누어서 나누기가 되지 않을때까지 나눴다.
위의 방법은 당연히 에러를 만들었다.. 노트에 쓰지않고 생각으로만 해결하려고 해서 나타난 결과였다..
다시한번 고민을 하다가 최대공약수를 이용하면 되겠다라는 방법을 찾게되었고 유클리드 호제법을 통해 최대공약수를 구할수 있는 방법을 구글링해서 찾았다.
💡유클리드 호제법 : 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다.
그 결과 최종나온 소스코드는 다음과 같다.
function solution(numer1, denom1, numer2, denom2) {
const number = (numer1 * denom2) + (numer2 * denom1)
const denom = (denom1 * denom2)
const gcb = (a, b) => a % b === 0 ? b : gcb(b, a % b)
const getGcb = gcb(number, denom)
return [number/getGcb, denom/getGcb]
}
사람들의 풀이를 보다가 틸트 연산자라는 것을 알게 되었다. ~~을 사용할 경우 Math.floor()함수와 같은 역할을 한다는 것을 알게되었다. 현업에서 써먹어야지 :)