Today I Learend
- Programmers 문제 풀기
- 면접 스터디 진행
Programmers 문제 풀기
분수의 덧셈
문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해 보세요.
입출력 예
numer1 | denom1 | numer2 | denom2 | result |
1 | 2 | 3 | 4 | [5, 4] |
9 | 2 | 1 | 3 | [29, 6] |
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
나의 풀이
function solution(numer1, denom1, numer2, denom2) {
let numer = (numer1 * denom2) + (numer2 * denom1);
let denom = denom1 * denom2;
let first = numer;
let second = denom;
for ( let i = Math.min(numer, denom); i >= 2; i--) {
if (first % i === 0 && second % i === 0) {
first = numer / i;
second = denom / i;
}
}
return [first, second];
}
- 첫 번째 분수와 두 번째 분수를 더한다.
- for문을 돌리면서 1번의 결과물로 나온 분수를 기약분수로 만든다.
- 기약분수를 배열의 형태로 return 한다.
다른 사람의 풀이
function fnGCD(a, b){
return (a%b)? fnGCD(b, a%b) : b;
}
function solution(denum1, num1, denum2, num2) {
let denum = denum1*num2 + denum2*num1;
let num = num1 * num2;
let gcd = fnGCD(denum, num); //최대공약수
return [denum/gcd, num/gcd];
}
최대공약수를 구하는 fnGCD라는 함수를 따로 생성해서 반복문 없이 효율적으로 문제를 풀었다.
회고
면접 스터디 첫날이었다. 미리 노션 페이지에 각자 이력서를 업로드해 두고 다른 사람의 이력서를 보면서 질문을 다섯 개씩 준비한 후에 오늘 한 명씩 돌아가면서 실제 면접 보듯이 질문받는 방식으로 진행했는데 대답하는 게 쉽지 않았다. 근데 확실히 이렇게 실전처럼 준비하는 게 큰 도움이 될 거 같다! 언제 면접 제의가 와도 준비되어 있을 수 있도록 노력하는 중이다.