본문 바로가기

코딩테스트

피자 나눠먹기 2

최소공배수를 구하는 공식에서 매우 헤맸다

완전히 수학적으로 접근했음

아직 머리가 코드로 이루어져있지 않나보다


public class PizzaTwo {
    public int solution(int n) {
        int answer = 0;

        int a = gcd(6, n);
        int pizza = (n * 6) / a;
        answer = pizza / 6;
        return answer;
    }

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

 

접근법은 최소공배수를 구하는 것에 집중했다

 

최소공배수 = (a * b) / 최대공약수 라는 점을 활용했음

 

 


참고할만한 풀이

 

while의 무한루프를 활용해서 풀어낸 경우

매우 참고할만함

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

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

        return answer;
    }
}

 

while문 내의 if문을 중괄호 포함해서 써본다면

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

 

이렇게 될것이다. 곱셈이 먼저 행해지고 이후에 나머지 연산자가 계산됨

 

 

 

 

최대공약수 메서드를 다르게 쓴 케이스

class Solution {
    public int solution(int n) {

        return n / gcd(6, n);
    }

    int gcd(int m, int n) {
        return m % n == 0 ? n : gcd(n, m % n);
    }
}

 

삼항연산자를 사용했다

'코딩테스트' 카테고리의 다른 글

배열의 평균값  (0) 2026.04.07
피자 나눠먹기 3  (0) 2026.04.02
피자 나눠먹기 1  (0) 2026.03.30
짝수는 시러용  (0) 2026.03.27
최빈값 구하기  (0) 2026.03.27