[프로그래머스 | Javascript] 코딩테스트 입문 - 피자 나눠 먹기(2)

박기영·2022년 10월 23일
0

프로그래머스

목록 보기
59/126

solution

// 6과 n의 최소공배수를 구한다
// 최소공배수를 n으로 나눈 값을 반환한다
function solution(n) {
    let a = n;
    let b = 6;

    // 최대공약수 구하기
    while(a % b !== 0){
        let r = a % b;
        
        if(r !== 0){
            a = b;
            b = r;
        }
    }
    
    // 최소공배수 = 두 자연수의 곱 / 최대공약수
    let min = (n * 6) / b;

    return min / 6;
}

최소공배수를 활용하는 문제였다.
따라서, 유클리드 호제법을 사용하였다.

예를들어,
10명이 1판에 6조각을 주는 피자를 모두 동일한 개수로 나눠 먹으려면
총 30조각이 필요하다. 인당 3조각이 가야지 모두 동일하게 먹을 수 있기 때문이다.

여기서 30은 어떻게 나온걸까?
10과 6의 최소공배수를 구한 것이다.

최소공배수를 조각수(6)으로 나누면 필요한 피자 판의 수(5)가 나온다.

지난번에 유클리드 호제법을 별도로 함수로 분리시켜서 풀어봤는데, 소모 시간이 늘어나서 이번에는 그냥 내부에서 작성했다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글