📑 1. 피자 나눠 먹기(1)

첫 번째 시도 틀림 (정확도 80%)
테스트 케이스 5,6에서 틀림

이유는 7의 배수 일 때 불필요하게 한 판이 추가됨
n을 7로 나눈 나머지가 0일 때 (7의 배수 일 때는) n/7만 리턴하도록 코드 추가해 주었다.

⭐정답코드
class Solution {
public int solution(int n) {
if (n<=7) return 1;
else if (n%7==0) return n/7;
else return n/7 + 1;
}
}
⭐최적 코드
n / 7.0을 하면 소수점이 나올 때 올림해야 하지만, 정수 연산을 활용해 계산을 단순화할 수 있다.
(n + 6) / 7은 n을 7로 나눴을 때 남은 조각이 있으면 자동으로 올림 효과를 주기 때문이다.
이렇게 하면 Math.ceil(n / 7.0) 같은 실수 연산 없이, 정수 연산으로 간단하게 해결할 수 있다.
import java.lang.Math;
class Solution {
public int solution(int n) {
return (int) Math.ceil(n / 7.0);
}
}
class Solution {
public int solution(int n) {
return (n + 6) / 7; // 올림 효과를 내기 위해 (n + 6) / 7 사용
}
}
📑 2. 피자 나눠 먹기(2)

이 문제는 모든 사람이 동일한 개수의 피자 조각을 먹을 수 있도록 최소한의 피자 판 수를 구하는 문제이다.
즉, n명이 피자를 나눠 먹을 때 6조각으로 나눠지는 최소한의 피자 개수를 찾아야 한다.
n명이 모두 같은 개수의 조각을 먹어야 하므로, 6과 n의 최소공배수(LCM)를 구해서 최소공배수를 6으로 나누면 필요한 피자 판 수를 알 수 있다.
⭐ 정답 코드
class Solution {
public int solution(int n) {
return lcm(n, 6) / 6;
}
// 최소공배수(LCM) 구하기: LCM(a, b) = (a * b) / GCD(a, b)
private int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
// 최대공약수(GCD) 구하기 (유클리드 호제법)
private int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
}
이 문제 풀 때 최소공배수(LCM, Least Common Multiple)를 구하는 공식은 아래와 같다.

여기서 a = n, b = 6 이고
예를 들어, n = 4이면 LCM(4, 6) = 12
최소공배수를 6으로 나누어 필요한 피자 판 수를 구한다.
예를 들어 LCM(4,6) / 6 = 12 / 6 = 2 (즉, 2판 필요)
이 공식을 쓰려면 최대공약수(Greatest Common Divisor) 를 알아야 최소공배수를 빠르게 구할 수 있기 때문에 gcd 를 구하는 메서드도 따로 만들어 주었다.
📑 3. 피자나눠먹기(3)


이 문제는 n명이 slice 조각으로 나뉜 피자를 나눠먹을 때, 최소한 한 조각 이상 먹기 위해 필요한 피자 판 수를 구하는 문제이다.
피자 나눠 먹기(1)이랑 비슷하다. 같은 방법을 써서 3항 연산자로 풀었다.
만약에 n이 slice로 딱 나누어 떨어지면 그냥 n / slice를 리턴하고, 아니라면 여분의 피자 한 판 전체를 추가해야 하므로 n / slice + 1 값을 리턴한다.
반면 Math.ceil로 푸는 방법도 있다. (주석처리 함)
한 판에 slice 조각이 있고, n명이 모두 최소 1조각씩 먹어야 하기 때문에, n을 slice로 나눈 값을 올림(ceil) 해서 최소 판 수를 구해도 된다.
⭐ 정답 코드
// 나머지로 풀기
class Solution {
public int solution(int slice, int n) {
return (n % slice == 0) ? (n / slice) : (n / slice + 1);
}
}
/*
// Math.ceil로 풀기
class Solution {
public int solution(int slice, int n) {
return (int) Math.ceil((double) n / slice);
}
}
*/
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
| [프로그래머스] (Java) 특정문자 제거하기 문제풀이 (4) | 2025.03.14 |
|---|---|
| [프로그래머스] (Java) 배열의 평균값, 옷가게 할인 받기, 아이스 아메리카노 , 나이 출력, 배열 뒤집기 문제풀이 (6) | 2025.03.10 |
| [프로그래머스] (Java) 최빈값 구하기 (해시맵) (9) | 2025.03.06 |
| [프로그래머스] (Java) 안전지대 문제풀이 (21) | 2025.03.05 |
| [리트코드] LeetCode Longest Common Prefix (Easy) in Java (23) | 2025.02.22 |