[프로그래머스 / JS] Lv.0 피자 나눠 먹기 (2)

SOYEON JEONG·2023년 3월 7일
0

문제 설명

머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

제한사항
1<= n <= 100

입출력 예시

입출력 예 #1
6명이 모두 같은 양을 먹기 위해 한 판을 시켜야 피자가 6조각으로 모두 한 조각씩 먹을 수 있습니다.
입출력 예 #2
10명이 모두 같은 양을 먹기 위해 최소 5판을 시켜야 피자가 30조각으로 모두 세 조각씩 먹을 수 있습니다.
입출력 예 #3
4명이 모두 같은 양을 먹기 위해 최소 2판을 시키면 피자가 12조각으로 모두 세 조각씩 먹을 수 있습니다.

풀이

function solution(n) {
    function gcd(a, b) {
        while (b !== 0) {
            var r = a % b;
            a = b;
            b = r;
        }
        return a;
    }
    function lcm(a, b) {
        return (a * b) / gcd(a, b);
    }
    var l = lcm(n, 6);
    var m = 6 * lcm(n / gcd(n, 6), 1);
    return m / 6;
}
  1. 최소공배수 gcd함수 만들기
  2. 최대공약수 lcm함수 만들기
  3. l에 인원 n과 6의 최대공약수 구하여 할당
  4. 6과 n의 최소공배수로 인원을 나누고 그것과 피자 한판의 최대공약수 구한 후 6곱한 값을 m에 할당
  5. m을 6으로 나누기

개선

  1. 최대공약수, 최소공배수에 사로잡혀서 의미없는 코드를 많이 넣었다.
  2. 그저 최대공약수, 최소공배수 구하는 식만 만들어서 아직도 이해가 안 감.

타인의 풀이

const solution = (n) => {
    let piece = 6

    while(true) {
        if (piece % n === 0) {
            break
        }
        piece += 6
    }

    return piece / 6
}
  1. 피자가 한 판이 6조각이라고 한다면
  2. 6조각으로 나눠지지 않는다면 피자 한판씩(6조각) 추가
  3. 조건이 맞을 때까지 무한루프
  4. 조건이 맞으면 break해서
  5. 총 피자 조각을 6으로 나눠 피자 판 수 구하기.
profile
인프런에 취업하고 싶어!

0개의 댓글