프로그래머스 코딩테스트 입문에서 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
'코딩테스트 > 파이썬 코테' 카테고리의 다른 글
[프로그래머스] 진료순서 정하기 - 파이썬(index함수) (0) | 2023.06.15 |
---|---|
[프로그래머스] 최빈값 구하기 - 파이썬(Counter) (0) | 2023.06.08 |
댓글