본문 바로가기
파이썬

[프로그래머스] 피자나눠먹기(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