문제
https://school.programmers.co.kr/learn/courses/30/lessons/120816

풀이
class Solution {
public int solution(int slice, int n) {
int answer = n / slice;
if (n % slice != 0) {
answer++;
}
return answer;
}
}
class Solution {
public int solution(int slice, int n) {
return (n + slice - 1) / slice;
}
}
- 정수 나눗셈에서 올림을 구현하는 고전적인 패턴
(n + slice - 1) / slice
→ n이 slice로 나누어떨어지지 않으면 자동으로 올림 처리됨
예시 확인:
- slice=7, n=10 → (10 + 6) / 7 = 16 / 7 = 2
- slice=4, n=12 → (12 + 3) / 4 = 15 / 4 = 3
기본 개념: 정수 나눗셈의 특징
- 자바(Java)에서 정수끼리 나누면 소수점 아래는 버려짐(내림)
- 자바의 /는 내림 나눗셈
10 / 7 = 1 // 1.xxx 이지만 .xxx 버림
12 / 4 = 3
13 / 4 = 3 // 3.25 → 소수점 이하 버림
우리가 원하는 건 “올림” 나눗셈
n명이 있고, 한 판에 slice 조각이 있다면, 한 사람당 한 조각 이상 먹으려면 n조각 이상 필요함, 그럼 몇 판을 시켜야 할까?
- n / slice를 계산했을 때 딱 떨어지면 그게 답
- 하지만 딱 안 떨어지면 한 판 더 시켜야 함
| slice | n | 실제 계산 | 올림한 결과 | 필요한 피자 수 |
| 7 | 10 | 10 ÷ 7 = 1.428… | 2 | 2판 |
| 4 | 12 | 12 ÷ 4 = 3.0 | 3 | 3판 |
| 4 | 13 | 13 ÷ 4 = 3.25 | 4 | 4판 |
그런데 자바는 올림이 아니라 내림만 됨, 그래서 올림을 직접 만들어줘야 함
그 방법이 바로 (n + slice - 1) / slice
왜 (n + slice - 1) 이걸 더하는지?
예시 1: slice = 7, n = 10
(10 + 7 - 1) / 7 = 16 / 7 = 2
👉 결과 = 2
그럼 왜 7 - 1을 더했을까?
n = 10일 때, 단순히 10 / 7 하면 결과가 1
(1.428 → 소수점 버려짐)
그런데 우리는 소수점이 조금이라도 있으면 한 판 더 시켜야 함
그래서 slice - 1, 즉 6을 더해줌
이렇게 하면 나누기 전에 살짝 보정이 되어서, 정수 나눗셈을 써도 올림 효과가 남
수학적으로 보면
ceil(n / slice) 는 “n을 slice로 나눈 뒤 올림한 값”
근데 정수 계산에서는 ceil(a / b)를 아래처럼 바꿀 수 있음
ceil(a / b) = (a + b - 1) / b ← 단, a,b가 양수일 때만 성립(수학적 트릭)
예시로 검증
| n | slice | n/slice | 올림 | (n + slice - 1)/slice |
| 10 | 7 | 1.428 | 2 | (10 + 6) / 7 = 16 / 7 = 2 |
| 12 | 4 | 3.0 | 3 | (12 + 3) / 4 = 15 / 4 = 3 |
| 13 | 4 | 3.25 | 4 | (13 + 3) / 4 = 16 / 4 = 4 |
한 줄 정리
(n + slice - 1) / slice
= 정수 나눗셈에서 올림(ceil) 을 흉내내는 방법
= “딱 안 나누어떨어질 땐 한 판 더”를 자동으로 계산해줌
'Algorithm > Programmers' 카테고리의 다른 글
| [Programmers] Lv.0 | 피자 나눠 먹기 (1) | Java (0) | 2025.11.05 |
|---|---|
| [Programmers] Lv.0 | 피자 나눠 먹기 (2) | Java (0) | 2025.11.04 |
| [Programmers] Lv.0 | 배열의 평균값 | Java (0) | 2025.11.04 |
| [Programmers] Lv.0 | 옷가게 할인 받기 | Java (0) | 2025.11.03 |
| [Programmers] Lv.0 | 아이스 아메리카노 | java (0) | 2025.11.02 |
댓글