피자 나눠 먹기 (1)

2024. 7. 8. 18:00코딩테스트 입문

https://school.programmers.co.kr/learn/courses/30/lessons/120814

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


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


제한사항

  • 1 ≤ n ≤ 100

입출력 예

n result
7 1
1 1
15 3

입출력 예 설명
입출력 예 #1

  • 7명이 최소 한 조각씩 먹기 위해서 최소 1판이 필요합니다.

입출력 예 #2

  • 1명은 최소 한 조각을 먹기 위해 1판이 필요합니다.

입출력 예 #3

  • 15명이 최소 한 조각씩 먹기 위해서 최소 3판이 필요합니다.

피자는 한 판당 일곱 조각이 나오고, 주어진 n명이 최소 1조각을 먹기 위해 얼마만큼의 피자가 필요한지 찾는 문제입니다.

그러면 결국 피자는 최소 n 조각이 필요한데, 한 판당 일곱 조각이 나오므로 n <= k * 7 이라는 공식을 찾을 수 있습니다.

이제 우리는 k >= n / 7인 최소 k를 찾으면 됩니다.

 

파이썬의 math 패키지를 사용하면 다음과 같습니다.

import math
def solution(n):
    # n을 7로 나눈 뒤, 값을 올림 처리한다.
    answer = math.ceil(n / 7)
    return answer

사실 가독성 측면에서는 이게 가장 좋은 코드지만, 알고리즘용으로는 좋은 코드는 아닙니다.

물론 정~말 미세한 차이기는 한데, 추가적인 함수 호출을 수반하기 때문에 단순한 덧셈과 나눗셈보다 약간 더 많은 오버헤드를 발생시킬 수 있습니다.

 

이 문제 같은 경우는 함수 없이 이렇게 풀 수도 있습니다.

def solution(n):
    answer = (n + 6) // 7
    return answer

이건 두 가지 경우로 나누어 살펴볼 수 있습니다.

1. n이 7의 배수일 때: 6 // 7은 0으로 무시되므로 그냥 n // 7과 동일합니다.

2. n이 7의 배수가 아닐 때: 6이 더해짐으로서 n은 n보다 큰 7의 배수와 크거나 같아집니다. 따라서 n // 7 + 1이 된 것과 마찬가지입니다.

 

패키지를 사용하는 방법과 아닌 방법을 둘 다 알아두시면 좋을 것 같습니다.

'코딩테스트 입문' 카테고리의 다른 글

피자 나눠 먹기 (3)  (0) 2024.07.10
피자 나눠 먹기 (2)  (0) 2024.07.09
짝수는 싫어요  (0) 2024.07.07
최빈값 구하기  (0) 2024.07.06
중앙값 구하기  (0) 2024.07.05