Skip to content

Latest commit

 

History

History
74 lines (52 loc) · 2.44 KB

File metadata and controls

74 lines (52 loc) · 2.44 KB

피자 나눠 먹기 (2)

📌 문제 설명

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

제한 조건

  • 1 ≤ n ≤ 100

입출력 예

n result
6 1
10 5
4 2

🧐 접근

최대공약수와 최소공배수를 이용해 풀이하자

class Solution {
    public int solution(int n) {
        return lcm(n, 6) / 6;
    }

    private int gcd(int a, int b) {
        while (b != 0) {
            int temp = a;
            a = b;
            b = temp % b;
        }
        return a;
    }

    private int lcm(int a, int b) {
        return a * (b / gcd(a, b));
    }
}

💡 풀이

모두가 같은 수의 피자 조각을 먹어야 하므로, 사람의 수n과 피자 조각 수6조각 두 수의 최소 공배수를 구한 후 피자 조각 수에 해당하는 6으로 나머지 연산을 수행하면 모두가 동일한 조각을 섭취 가능한 최소 피자 판수를 구할 수 있다.

먼저 두 수의 최소 공배수를 구하기 위해 먼저 두 수의 최대 공약수를 구해야한다. 메소드gcd(a, b)에서 두 수에 대해 나머지 연산자를 수행했을 때 결과가 0이 나올때까지 연산을 반복수행하여 최소 공배수를 추출한다.

그 다음 최소 공약수를 사용해 최대 공배수를 구한다. 메소드lcm(a, b)에서 사람의 수a 피자 조각 수6을 매개변수로 받아 와서 메소드 내 해당 연산식을 수행한다. a * b / gcd(a, b)로 작성해도 무관하다.

메소드lcm()에서 추출된 최소 공배수를 피자 조각 수6으로 나머지 연산을 수행하면 모든 사람이 동일한 피자 조각을 섭취할 수 있는 최소 피자 판 수를 구할 수 있다.

📘 그 외의 풀이

1. 무한 루프

💡 무한 루프 내에서 피자 판 수answer를 1씩 증가 시키며 해당 연산의 결과값이 0이 될 때까지 연산을 반복 수행한다.

class Solution {
    public int solution(int n) {
        int answer = 1;

        while(true){
            if(6*answer%n==0) break;
            answer++;
        }

        return answer;
    }
}