<AlgoHanKyul/> 뇌말랑 Lv0 문제풀이 - 1

<AlgoHanKyul/> 뇌말랑 Lv0 문제풀이 - 1

·

4 min read

Problem.

Learn.

  • Math.floorMath.trunc의 차이를 배움
    • floor는 소수점 내림 발생 -> 만약에 음수 -23.3이면 -24가 될 수 있기 때문에 주의
    • trunc는 소수점 버림 발생 -> -23.3이어도 -23

Solve.

function solution(num1, num2) {
    var answer = Math.floor((num1 / num2) * 1000);
    return answer;
}

Problem.

Learn.

  • toFixed(n) 메서드는 소수점 n째 자리까지 자름
  • Math.round로 소수점 자리를 계산할 수도 있음
    • Math.round(num * 10) / 10 <- 10을 곱하고 나누어 소수점 첫째 자리까지

Solve.

function solution(numbers) {
    var answer = 0;
    var sum = 0;
    var numLen = numbers.length;
    for(var i = 0; i < numLen; i++) { 
        sum = sum + numbers[i]
    }
    answer = (sum / numLen).toFixed(1)
    return answer;
}

Problem.

Learn.

  • 약수 -> 어떤 수를 나누었을 때 나머지가 0으로 딱 나누어지는 수
  • 공약수 -> 두 숫자가 공통으로 갖는 약수
  • 예를 들어,
    • 12와 18의 약수
      • 12의 약수: 1, 2, 3, 4, 6, 12
      • 18의 약수: 1, 2, 3, 6, 9, 18
      • 공통된 약수: 1, 2, 3, 6
      • GCD -> 가장 큰 공약수 최대공약수로 6
  • 서로소 -> 두 숫자가 공약수가 1밖에 없는 상태. 즉, 두 숫자가 공통으로 나눌 수 있는 가장 큰 수가 1
  • 예를 들어,
    • 8과 15는 8의 약수: 1, 2, 4, 8 / 15의 약수: 1, 3, 5, 15
    • 공통된 약수가 1뿐이므로 8과 15는 서로 소
    • 6과 9는 6의 약수: 1, 2, 3, 6 / 9의 약수: 1, 3, 9
    • 공통된 약수가 1, 3이므로 서로 소가 아님
  • 약분 -> 분수의 분자와 분모를 공약수로 나누어 간단하게 만드는 과정
    • 예를 들어,
      • 12/18:
        • 12와 18의 공약수는 1, 2, 3, 6
      • 가장 큰 공약수(GCD)로 나누면:
        • (12/6)/(18/6) = 2/3
      • 따라서 약분 결과는:
        • 2/3
  • 약분 하려면 공약수를 알아야 하고, 기약 분수를 만들려면 분자와 분모가 서로 소인지 확인해야 함
  • 기약 분수 -> 분수를 더 이상 약분할 수 없는 형태로 만든 분수. 즉, 분자와 분모의 공약수가 1인 분수
  • 예를 들어,
    • 6/8:
      • 분자와 분모의 공약수가 2인 상태
      • 6의 약수: 1, 2, 3, 6
      • 8의 약수: 1, 2, 4, 8
      • 공약수: 1, 2
      • GCD: 2
    • 기약 분수 구하는 방법:
      • 분자와 분모의 GCD를 구함
      • 분자와 분모를 GCD로 나눔
      • 더 이상 약분할 수 없으면 기약 분수
      • 6/8:
        • (6/2)/(8/2) = 3/4
        • 3의 약수: 1, 3
        • 4의 약수: 1, 2 ,4
        • 따라서 3/4는 분자와 분모의 공약수가 1인(서로 소) 분수이므로 기약 분수
  • 최소공배수 -> LCM, 두 수 이상의 수에서 공통으로 존재하는 배수 중 가장 작은 값
    • 배수 나열법:
      • 4와 6의 최소공배수:
        • 4의 배수: 4, 8, 12, 16, 20, ...
        • 6의 배수: 6, 12, 18, ...
        • LCM: 12
    • 소인수분해법:
      • 두 수를 소인수분해한 후, 공통된 소인수와 모든 소인수를 고려하되 각 소인수의 지수 중 최대값을 곱함
        • 12와 18의 최소공배수:
          • 12 = 3 * 2^2
          • 18 = 2 * 3^2
          • 각 소인수의 지수 중 최대값을 곱함: 2^2 * 3^2 = 36
          • LCM: 36
    • 최대공약수법:
      • 최소공배수 = (두 수의 곱 / 최대공약수)
      • 8과 12의 최소공배수(LCM):
        • 8 * 12 = 96
        • 최대공약수
          • 8의 약수: 1, 2, 4, 8
          • 12의 약수: 1, 2, 3, 4, 6, 12
          • GCD: 4
        • 96 / 4 = 24
        • LCM: 24

Solve.

function solution(numer1, denom1, numer2, denom2) {
    // 최소공배수(LCM) 구하기
    let GCD = findGCD(denom1, denom2);
    let LCM = (denom1 * denom2) / GCD; // 두 분모의 곱을 GCD로 나눔

    // 각 분수를 통분하여 분자 계산
    let a = numer1 * (LCM / denom1); // 첫 번째 분자의 변환된 값
    let b = numer2 * (LCM / denom2); // 두 번째 분자의 변환된 값

    // 두 분수를 더한 결과
    let ab = a + b; // 합쳐진 분자
    let denom = LCM; // 통분된 분모

    // 결과를 기약분수로 변환
    let resultGCD = findGCD(ab, denom);
    ab /= resultGCD; // 분자를 약분
    denom /= resultGCD; // 분모를 약분

    return [ab, denom];
}

function findGCD(a, b) {
    let smaller = Math.min(a, b);
    let GCD = 1;

    for (let i = 1; i <= smaller; i++) {
        if (a % i === 0 && b % i === 0) {
            GCD = i;
        }
    }

    return GCD;
}