[오늘의 문제] 피자 나눠 먹기 (3)

shlim55·2025년 10월 8일

코딩테스트

목록 보기
146/223

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120816

문제 설명
머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

제한사항
2 ≤ slice ≤ 10
1 ≤ n ≤ 100
입출력 예
slice n result
7 10 2
4 12 3
입출력 예 설명
입출력 예 #1

10명이 7조각으로 자른 피자를 한 조각 이상씩 먹으려면 최소 2판을 시켜야 합니다.
입출력 예 #2

12명이 4조각으로 자른 피자를 한 조각 이상씩 먹으려면 최소 3판을 시켜야 합니다.

내가 작성한 코드문

def solution(slice, n):
    answer = 0
    
    if n % slice == 0:
        answer = n // slice
    elif n % slice != 0:
        answer = n // slice + 1

    return answer

다른 사람의 풀이

def solution(slice, n):
    return ((n - 1) // slice) + 1
    

((n−1)//slice)+1 공식은 프로그래밍에서 올림 연산 (Ceiling)을 구현하는 간결한 방법 중 하나다.

def solution(slice, n):
    d, m = divmod(n, slice)
    return d + int(m != 0)

몫과 나머지 계산 (divmod(n, slice))
"몫과 나머지를 정확히 나눠서 처리하는" 방식이다.

d, m = divmod(n, slice) (나눗셈):

n을 slice로 나눠서 몫 (d)나머지 (m)를 구합니다.

몫 (d): 피자가 꽉 차게 필요한 판수.

나머지 (m): 피자를 못 먹은 남은 사람 수.

예시 1: 7명(n=7), 6조각(slice=6) → 몫 1, 나머지 1

예시 2: 12명(n=12), 6조각(slice=6) → 몫 2, 나머지 0

int(m != 0) (나머지가 있는지 확인):

나머지 (m)가 0이 아니라면 (사람이 남았다면) → True → 정수 1로 변환.

나머지 (m)가 0이라면 (사람이 안 남았다면) → False → 정수 0으로 변환.

d + int(m != 0) (총 판수):

몫 (d)추가 판수 (0 또는 1)를 더한다.

예시 1: 1+1=21 + 1 = \mathbf{2}판 (남은 1명을 위해 1판 추가)

예시 2: 2+0=22 + 0 = \mathbf{2}판 (남은 사람이 없으므로 추가 필요 없음)

from math import ceil
def solution(slice, n):
    return ceil(n/slice)

수학 라이브러리인 math 모듈의 ceil (천장 함수, 올림)을 사용하여 피자 판수를 계산

n (사람) slice (조각) n/slice (나눗셈) ceil(n/slice) (올림) 필요한 판수
7 6 7/6≈1.166 2 1판으로는 부족하니 2판 필요
12 6 12/6=2.0 2 딱 2판으로 모두에게 줄 수 있음
13 6 13/6≈2.166 3 2판으로는 부족하니 3판 필요

  1. 올림 함수
    코드: ceil(n/slice)
    장점: 가장 직관적이고 명확함. 코드가 간결함.
    단점: math 모듈을 import 해야 함.

  2. 나머지 이용
    코드: d + int(m != 0)
    장점: math 모듈 없이 가장 논리적으로 올림 처리.
    단점: divmod 함수나 몫/나머지 계산이 필요함.

  3. 트릭 이용
    코드: ((n - 1) // slice) + 1
    장점: math 모듈 없이 가장 짧게 올림 처리 가능.
    단점: 왜 작동하는지 이해하기 가장 어려움.

profile
A Normal Programmer

0개의 댓글