본문 바로가기
코딩테스트/파이썬 코테

[프로그래머스] 피자나눠먹기(2) - 파이썬(최대공약수, 최소공배수)

by 코듀킹 2023. 6. 8.

프로그래머스 코딩테스트 입문에서 Lv0에서나오는 피자나눠먹기(2) 문제이다. 피자는 6조각으로 나눠주고, n명의 사람이 한조각도 남김없이 똑같이 나눠먹어야하는 문제이다. 파이썬으로 최대공약수, 최소공배수를 구하는 함수를 만들어서 풀이했다. 

 

 

* 이어드림스쿨 3기 참여하면서 진행하고 있는 스터디원 분이 작성한 코드를 제가 풀이한 내용입니다.(23년 6월 7일 코드리뷰 스터디 발표내용)

 

기존 코드

# day4 피자나눠먹기(2) 기존 Code
def gcd(a, b):
    if b == 0: 
        return a
    return gcd(b, a%b)

def lcm(a, b): # 최소공배수
    return a*b // gcd(a, b)

def solution(n):
    return lcm(n,6) / 6

 

코드 풀이

# day4 피자나눠먹기(2) 노재우님 기존 Code 풀이(주석참고)

# 유클리드 호제법을 사용하여 재귀적으로 계산하여 최대공약수를 구하는 함수를 만들었다.
def gcd(a, b):
    # 재귀함수를 계속 돌다가 b가 0이면, a를 리턴한다. 
    if b == 0: 
        return a
		# 재귀 함수. a자리에 다시 b를 넣고, b자리에는 a%b를 넣는다. 
    return gcd(b, a%b)

''' 
재귀 함수 대신 While문을 쓰는 것도 가능하다.
def gcd(a, b):
		while b < 0:
				a = b
				b = a%b
    return a
'''

# 최대공약수 함수를 활용해서 최소공배수를 구하는 함수를 만들었다.
def lcm(a, b):
		# 두수 곱한거에서 최대공약수를 나누면 최소공배수이다. 
		# 재우님 코드에서는 몫을 구하는 // 를 사용해서 / 로 수정해주었다.
    return a*b / gcd(a, b)

# 최총적으로 n명의 사람수와 6조각의 피자조각의 최대 공배수를 구한 뒤, 
# 피자조각 수로 나누어서 피자 몇판이 필요한지 리턴한다.
def solution(n):
    return lcm(n,6) / 6

 

쉽게 풀이한 코드

현실 파이썬에서는 math.lcm 함수를 쓰면 해결되는 문제이다.

import math
def solution(n):
    return math.lcm(n,6) / 6
 

 

댓글