시간관계상 바로 다음날꺼인 Lv1까지만 풀어보자.
전날 나왔던 두 수의 몫과 비슷한 예이다.
문제를 보면 나눈 후 1000을 곱해준다.
입출력 예를 보면 반올림이 되지 않은 후에 1000이 곱해지는 모습을 확인 할 수 있다.
function solution(num1, num2) {
return Math.floor(num1 / num2 * 1000);
}
function solution(num1, num2) {
var answer = num1 == num2 ? 1 : -1;
return answer;
}
이번 문제 같은 경우 if문으로도 풀 수 있겠지만 삼항연산자가 더 깔끔해보여서, 삼항연산자로 풀이해봤다.
문제만봐도 벌써 어지럽다.
분수를 더하고 더한 값을 기약 분수로 나눠야 하는 문제이다.
유클리드 호제법 같은 알고리즘 풀이를 사용해도 되겠지만.
알고리즘에 익숙하지 않기 때문에 그때그때 생각나는대로 무지성으로 풀어냈다.
풀이는 우선
두 분모를 곱하고 각각의 분자는 상대 분모와 곱해준다.
const denum = denum1 * num2 + denum2 * num1;
const num = num1 * num2;
보통은 이러면 덧셈은 끝난다.
하지만 문제를 보면 두 분수를 더한 값의 기약 분수로 나타내야한다.
기약분수란
분모와 분자가 1이외에는 공약수가 없는 분수를 말한다.
기약분수로 만드려면 약분을 통해 기약 분수로 만들어 줘야한다.
function solution(denum1, num1, denum2, num2) {
const denum = denum1 * num2 + denum2 * num1;
const num = num1 * num2;
let maxNum = 1;
for(let i = 1 ; i <= denum ; i ++) {
if(denum%i === 0 && num%i === 0) {
maxNum = i
}
}
return [denum/maxNum, num/maxNum]
}
위 코드를 살펴보면
1로 나누었을때 이미 기약분수라면 통과가 될것이고,
아니라면 for문을 돌면서 maxNum은 1씩 커지면서
최대 공약수를 찾아낸다.
그 후 기약분수가 아닐시 return 에서 최대 공약수로 나눠 주면서 두 분수의 덧셈 후 기약 분수의 값이 만들어진다.
function solution(numbers) {
var answer = [];
numbers.forEach((res) => {
answer.push(res * 2);
})
return answer;
}
풀이랄것도 없지만 forEach로 배열의 값들을 하나 씩 꺼내온 후 *2를 해서 answer에 하나씩 추가해주는 식으로 풀었다.
다른 사람들은 reduce나 map으로도 많이 풀었던대 나중에 참고해보자.