극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, 입문] 피자 나눠 먹기(2)

sundori 2024. 6. 14. 18:23

목차

    문제 설명

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

    해결 방법

    필요한 피자의 수는 n명을 6조각으로 나누었을 때 남김없이 나누어지는 최소 피자의 수를 찾는 것이다.

    1. 피자는 한 판에 6조각.
    2. n명이 모두 같은 수의 피자 조각을 먹으려면, n과 6의 최소공배수(LCM)를 구한다다.
    3. LCM을 6으로 나누어 필요한 피자 판 수를 계산한다.

    예시

    • 6명의 경우: 6명을 모두 같은 수의 피자 조각으로 나누기 위해 최소 한 판이 필요.
    • 9명의 경우: 9명과 6의 최소공배수를 구하면 18이 되고, 이는 3판이 필요.

    코드 설명

    1. gcd 메서드는 두 수의 최대공약수를 계산.
    2. lcm 메서드는 두 수의 최소공배수를 계산.
    3. getPizza 메서드는 n과 6의 최소공배수를 구하고, 이를 6으로 나누어 필요한 피자의 수를 반환.
    4. solution 메서드는 getPizza 메서드를 호출하여 결과를 반환.
    abstract class Pizza {
        abstract int getPizza(int n);
    }
    
    class Solution extends Pizza {
        // 최대공약수(GCD) 계산
        private int gcd(int a, int b) {
            while (b != 0) {
                int temp = b;
                b = a % b;
                a = temp;
            }
            return a;
        }
    
        // 최소공배수(LCM) 계산
        private int lcm(int a, int b) {
            return a * b / gcd(a, b);
        }
    
        @Override
        public int getPizza(int n) {
            // 6과 n의 최소공배수 계산 후 6으로 나눔
            return lcm(6, n) / 6;
        }
    
        public int solution(int n) {
            return getPizza(n);
        }
    }