코딩테스트

[코딩테스트] day2

홍시_코딩기록 2024. 3. 3. 21:16

문제1

더보기

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

* 내 풀이

function solution(num1, num2) {
    const num = Math.floor((num1 / num2) * 1000)
    return num
}

 

*다른 사람 풀이

function solution(num1, num2) {
    return Math.trunc(num1 / num2 * 1000);
}

 

나는 Math.floor를 사용했는데 다른 사람 풀이를 보니 Math.trunc()를 사용했다.

 

- Math.trunc() : 소수점 이하를 잘라냄 / Math.trunc(3.14) -> 3

- Math.floor() : 주어진 숫자보다 작거나 같은 가장 큰 정수를 반환 / Math.floor(-3.14) -> -4

 

주어진 문제가 정수를 반환하는 거였으므로 Math.trunc가 더 적합한 것 같다.

 

 


문제2

더보기

정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

 

* 내  풀이

function solution(num1, num2) {
    if(num1 === num2) {
        return 1
    } else {
        return -1
    }
}

 

 

* 다른 사람 풀이

function solution(num1, num2) {
    var answer = num1 === num2 ? 1 : -1;
    return answer;
}

 

 

삼항연산자를 쓸 생각을 왜 못했을까..?

 


문제3

더보기

첫 번째 분수의 분자와 분모를 뜻하는 numer1denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

* 내 풀이

function solution(number1, denom1, number2, denom2) {
    let answer = [];

    // 분모
    let denom = denom1 * denom2;
    // 분자
    let num = number1 * denom2 + number2 * denom1;

    let a = num;
    let b = denom;

    const gcd = (a, b) => (a % b === 0 ? b : gcd(b, a % b));

    answer[0] = a / gcd(a, b);
    answer[1] = b / gcd(a, b);

    return answer
}

 

* 다른 사람 풀이

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];
}

 

- 입문이라며,,,! 입문도 머리 으깨지는 나. 열심히 하자..

 

이 문제의 관건은 최대공약수 구하기

안녕 나의 5학년,,

1. a, b가 나눠진다면 b가 최대 공약수 ( a > b)

2. a, b가 나눠지지 않는다면 b와 a % b(나머지)로 다시 나누기

3. a, b가 나눠진다면 a % b가 최대 공약

 


 

문제 4

더보기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

* 내 풀이

function solution(numbers) {
    return numbers.map((arr) => arr * 2)
}

 

* 다른 사람 풀이

function solution(numbers) {
    return numbers.reduce((a, b) => [...a, b * 2], []);
}

 

- reduce() : 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환

 

    arr.reduce(callback[, initialValue])

 

- 배열이 비어있는데 initailValue도 제공하지 않으면 타입에러 발생.

- 초기값을 주는 것이 더 안전함.