⚡문제정보
분수의 덧셈 문제입니다.
수학에 약하다보니 통분을 해야한다는건 알겠는데.. 코딩을 어케해야하지.. 하면서
분수에 대해 찾아보다보니
가장 쉽게 통분을 하는 방법은 분모와 분모를 서로 곱해주는것이었습니다
서로를 곱해주면.. 같은 값이 될 수 밖에 없겠죠 크으 역시 사람들 똑똑하다
통분 해준 다음 기약분수로 만들어야하는데
기약분수로 만들어주려면 분자와 분모의 최소공배수로 나눠주면 해결
🙄제한사항
0 <denum1, num1, denum2, num2 < 1,000
🔍접근방법
분수끼리의 덧셈을 위해 통분을 해줘야한다.
기약분수로 만들어주기 위해 덧셈한 뒤 분자,분모의 최소공배수를 파악해야한다.
🔍나의 풀이
function solution(denum1, num1, denum2, num2) {
let wholemeal = [denum1*num2 + denum2*num1,num1*num2]
const gcd = (a, b) => {
if (b === 0) return a
return gcd(b, a % b)
}
let least = gcd(wholemeal[0],wholemeal[1])
let answer = [wholemeal[0] / least , wholemeal[1]/least]
return answer
}
코드 설명은 후술하겠습니다.
사실 wholemeal 변수는 필요없을 것 같은데 직관적으로 보기 위해
변수로 선언해줬어요
function solution(denum1, num1, denum2, num2) {
let wholemeal = [denum1*num2 + denum2*num1,num1*num2]
//통분을 해줍니다. 분모는 통일되니까 한번만 계산하고 분자들은 각각 곱해서 더해줍니다.
const gcd = (a, b) => {
if (b === 0) return a
return gcd(b, a % b)
}
//최소공배수를 구하는 함수입니다.
let least = gcd(wholemeal[0],wholemeal[1])
//같은 값을 구하기 위한 재귀호출이 일어나지 않도록 변수에 값을 저장해줬습니다.
let answer = [wholemeal[0] / least , wholemeal[1]/least]
// 분자,분모를 각각 최소공배수로 나눠주어 기약분수로 만들었습니다.
return answer
// 정답 반환
}
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 1] 명예의 전당 Javascript (0) | 2022.12.14 |
---|---|
[Programmers Level 0] 등수 매기기 Javascript (0) | 2022.12.14 |
[Programmers Level 1] 두개 뽑아서 더하기 Javascript (0) | 2022.12.13 |
[Programmers Level 1] 소수찾기 Javascript (0) | 2022.12.12 |
[Programmers Level 1] 이상한 문자 만들기 Javascript (0) | 2022.12.12 |