코딩테스트

[프로그래머스] 피자 나눠 먹기 (1)

john-lennon 2026. 4. 5. 16:51

문제 설명

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

 

제한사항

1 ≤ n ≤ 100

 

입출력 예

n result
7 1
1 1
15 3

 


 

1. 피자는 한판에 7조각
2. 모든 사람은 피자를 한조각 이상 먹어야함
3. 따라서 사람 수 n을 7로 나눈 몫이 필요한 피자 판 수가 된다.

→ 하지만 정확히 나누어떨어지지 않는 경우에는 남눈 사람이 생기기 때문에 피자를 한 판 더 추가해야함

 

나의 코드

function solution(n) {
    if (n <= 7) {
        return 1;
    } else {
        if (n % 7 === 0) {
            return Math.trunc(n / 7); 
        } else {
            return Math.trunc(n / 7) + 1;
        }
    }
}

 

나의 방식

n <=7 인 경우에는 한 판이면 충분함으로 1을 반환

그 외에는 n / 7의 몫을 구한 뒤

나누어 떨어지면 그대로 사용

나머지가 있으면 + 1 을 해주는 방식으로 처리


case 1. 다른 사람의 코드

function solution(n) {
    return Math.ceil(n / 7)
}

 

차이점

Math.ceil()을 사용해서 나눗셈 결과를 바로 처리한 점이 다르다.

8 / 7 = 1.14 → 올림 → 2

14 / 7 = 2 → 그대로 2

나누어 떨어지지 않는 경우에는 올림을 통해 자동으로 +1이 적용되고 나누어 떨어지는 경우에는 그대로 값을 유지한다. 

 

case 2. 다른 사람의 코드

return n % 7 === 0 ? n / 7 : parseInt(n / 7) + 1;

 

차이점

나의 코드와 똑같은 로직이지만 삼항 연산자를 활용해 한 줄로 간결하게 표현한 점이 다르다.

또한 나는 if-else 를 중첩해서 조건을 나눴지만, 이 코드는 n % 7 === 0 인지만 판단해서 결과를 바로 반환하기 때문에 불필요한 구조를 줄였다.

 


 

알게 된 점

  • 숫자 계산 → Math.trunc(버림) / Math.floor(내림) / Math.ceil(올림)
  • 문자열 처리 → parseInt

이번 문제처럼 "나누어떨어지지 않으면 하나 더 필요하다" 와 같은 상황에서는 Math.ceil()이 가장 적절하다