코딩테스트 - 분수의 덧셈

송기영개발잘하고싶다·2023년 3월 12일
0

코딩테스트

목록 보기
1/2
post-thumbnail

코딩테스트 준비

오랜만에 이력서를 업데이트를 했다. 준비를 하면서 약 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()함수와 같은 역할을 한다는 것을 알게되었다. 현업에서 써먹어야지 :)

profile
업무하면서 쌓인 노하우를 정리하는 블로그🚀 풀스택 개발자를 지향하고 있습니다👻

0개의 댓글