실습 코드:

https://colab.research.google.com/drive/1OGclC7ZBO4Mgi-KNkdwaQGiV5GxEneph?usp=sharing


문제 설명

머쓱이네 피자 가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

  • 제한사항:
    • ( 1 \leq n \leq 100 )

입력 예시 및 설명

n result
6 1
10 5
4 2
  • 입력 예시 #1:
    • 6명이 모두 같은 양을 먹기 위해 한 판을 시켜야 피자가 6조각으로 모두 한 조각씩 먹을 수 있습니다.
  • 입력 예시 #2:
    • 10명이 모두 같은 양을 먹기 위해 최소 5판을 시켜야 피자가 30조각으로 모두 세 조각씩 먹을 수 있습니다.
  • 입력 예시 #3:
    • 4명이 모두 같은 양을 먹기 위해 최소 2판을 시키면 피자가 12조각으로 모두 세 조각씩 먹을 수 있습니다.

문제 접근 방법

  1. 피자 한 판은 6조각으로 이루어져 있습니다.
  2. n명이 모두 같은 양의 피자를 먹으려면 최소 몇 판이 필요한지 계산하기 위해 피자의 최소 공배수를 사용합니다.
  3. 최소 공배수(LCM)를 구해서 필요한 피자의 수를 계산합니다.

코드 구현

import math

def solution(n):
    # 최소 공배수(LCM)를 구하는 함수
    def lcm(x, y):
        return x * y // math.gcd(x, y)

    slices_per_pizza = 6
    # 최소 공배수를 이용하여 피자의 수를 계산
    return lcm(slices_per_pizza, n) // slices_per_pizza

# 테스트 케이스
print(solution(6))  # 출력: 1
print(solution(10)) # 출력: 5
print(solution(4))  # 출력: 2
  • 주석 설명:
    • lcm(x, y): 두 수의 최소 공배수를 구하는 함수입니다.
    • slices_per_pizza: 피자 한 판의 조각 수를 6으로 정의합니다.
    • lcm(slices_per_pizza, n) // slices_per_pizza: 최소 공배수를 이용하여 필요한 피자 판의 수를 계산합니다.

다른 풀이 방법

  1. 반복문을 이용한 풀이:
def solution(n):
    slices_per_pizza = 6
    pizzas = 1
    while (pizzas * slices_per_pizza) % n != 0:
        pizzas += 1
    return pizzas

# 테스트 케이스
print(solution(6))  # 출력: 1
print(solution(10)) # 출력: 5
print(solution(4))  # 출력: 2
  • 계산 복잡도: O(n)
  1. 수학적 접근을 이용한 풀이:
def solution(n):
    slices_per_pizza = 6
    return (n + slices_per_pizza - 1) // slices_per_pizza

# 테스트 케이스
print(solution(6))  # 출력: 1
print(solution(10)) # 출력: 5
print(solution(4))  # 출력: 2
  • 계산 복잡도: O(1)

계산 복잡도

  1. 첫 번째 풀이: O(1)
  2. 두 번째 풀이: O(n)
  3. 세 번째 풀이: O(1)

태그

#프로그래머스 #파이썬 #코딩테스트 #입문문제 #피자나눠먹기 #수학적풀이 #반복문 #최소공배수 #코딩문제풀이 #알고리즘

 

+ Recent posts