middlemoon

[입문]자바 - 피자 나눠 먹기(1). 본문

Algorithm/프로그래머스 Java 입문

[입문]자바 - 피자 나눠 먹기(1).

중대경 2025. 8. 24. 15:47

 

 

 

 

 

 

답안 )

class Solution{
    
    public int solution(int n){
        int answer = 0;
        int pizza = 7;
        
        answer = ( pizza + n - 1 ) / pizza;
        
        System.out.println(answer);
        return answer;
    }
    
    
    
}

 

 

 

과정 )

 

처음엔 반복문으로 접근해야하나? 라고 생각했다. 하지만 이 문제는

전체 사람 수 n을 7로 나눴을 때 몇 판이 필요한가? 만 구하면 끝나는 문제이다..
즉, 한 번의 나눗셈(그리고 올림 처리)만으로 답을 알 수 있다.

 

근데 여기서는 n명이 있든, 1000명이 있든, 계산 한 번이면 답이 딱 나오니까 반복문이 필요 없는 것.

우리가 원하는 건 첫번 째,

n / pizza

 

를 계산할 때 나머지가 있으면 무조건 +1 판이 더 필요하다는 사실은 맞다.

 

예를들어, n = 7, pizza = 7 -> 1판 /

n = 8, pizza = 7 -> 2판 (1.xx -> 올림)

n = 15, pizza = 7 -> 3판 (2.xx -> 올림)

즉, 실수 나눗셈 결과를 올림한 값을 정수로 얻어야하는 것이 포인트이다.

 

물론 실수로 계산하여 Math.ceil(n / (double)pizza) 도 가능하지만, 정수나눗셈이 가능하다.

(n + pizza - 1) / pizza

 

 

 

  • n / pizza → 피자를 딱 나눠떨어질 때만 맞음
  • (n + pizza - 1) / pizza → 항상 마지막 남은 사람들까지 먹을 수 있게 여분을 미리 더하는 방식

즉, 나머지가 생기면 한 칸 밀려서(=한 판 더 올라가서) 자동으로 올림이 된다.

 

 

 


 

참고 ) Math.ceil 버전

 

class Solution {
    public int solution(int n) {
        int pizza = 7;
        int answer = (int)Math.ceil((double)n / pizza);
        return answer;
    }
}

 

 

 

  • (double)n / pizza → 실수 나눗셈 (예: 10 / 7 = 1.428...)
  • Math.ceil(...) → 소수점 올림 (1.428... → 2.0)
  • (int) 캐스팅 → 다시 정수로 변환

 

Comments