Leeyanggoo
[코딩테스트 입문] Day-2 사칙연산, 조건문, 배열 본문
두 수의 나눗셈
정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.
function solution(num1, num2) {
var answer = Math.trunc(1000 * num1 / num2);
return answer;
}
여기서 Math.floor()가 아닌 Math.trunc()를 쓰는 이유는 다음과 같다.
Math.floor()는 "내림" 함수이기 때문에 만약 소수점이 있는 음수가 나온 경우 예상한 값과 다르게 출력될 수도 있다.
-8.1234라는 값이 있다고 할 때 Math.floor는 -9를 출력하지만, Math.trunc() 함수는 소수점 이하를 모두 "제거"하고 정수 부분만 반환하기 때문에 -8이 나온다.
숫자 비교하기
정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.
// function solution(num1, num2) {
// if(num1 === num2){
// return 1;
// } else {
// return -1;
// }
// }
const solution = (num1, num2) => (num1 === num2) ? 1 : -1
처음엔 if else문으로 풀었지만 다른 분들의 풀이를 보고 삼항연산자로 대체해보았다.
if문을 쓸 땐 항상 좀 더 간결하게 표현하는 방법이 있다는 걸 생각해야겠다.
분수의 덧셈
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
// function solution(numer1, denom1, numer2, denom2) {
// if(denom1 % denom2 == 0){
// let 분자 = numer1 + (numer2 * (denom1 / denom2));
// let 분모 = denom1;
// let answer = [분자, 분모];
// return answer;
// } else if(denom2 % denom1 == 0){
// let 분자 = numer2 + (numer1 * (denom2 / denom1));
// let 분모 = denom2;
// let answer = [분자, 분모];
// return answer;
// } else if(denom1 % denom2 != 0 || denom2 % denom1 != 0){
// let 분자 = (numer1 * denom2) + (numer2 * denom1);
// let 분모 = denom1 * denom2;
// let answer = [분자, 분모];
// return answer;
// }
// }
const solution = (numer1, denom1, numer2, denom2) => {
let 분자 = (numer1 * denom2) + (numer2 * denom1);
let 분모 = denom1 * denom2;
// 최대공약수를 찾는 함수
function gcd(a, b) {
return b ? gcd(b, a % b) : a;
}
// 최대공약수를 구함
let 최대공약수 = gcd(분자, 분모);
// 분자와 분모를 최대공약수로 나눠 기약분수로 변환
let answer = [분자 / 최대공약수, 분모 / 최대공약수];
return answer;
}
처음엔 기약 분수가 뭔지도 모르고 작성했다가 호되게 혼났던 문제.
최대공약수를 구해야 한다는 건 알았지만 방법을 몰라 친구(GPT)에게 물어보았다...
해당 함수는 "유클리드 알고리즘" 혹은 "유클리드 호제법"이라고 하며 두 양수의 최대공약수를 재귀적인 방법으로 구한다.
여기서 말하는 재귀적인 방법 혹은 재귀적으로 호출한다는 것은 함수가 자기 자신을 호출하는 걸 의미한다.
배열 두 배 만들기
정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.
function solution(numbers) {
let answer = [];
for(let i=0; i<numbers.length; i++){
answer[i] = numbers[i] * 2;
}
return answer;
}
앞서 변수 answer를 배열로 선언한 뒤에 for문을 사용해 값을 넣고 for문이 끝난 뒤 호출하여 문제를 풀었다.