[스파르타코딩클럽]데이터분석 과정/PYTHON
[Python 코드카타] 39 ~ 40번(프로그래머스)
doo_
2024. 1. 14. 18:17
39번 최대공약수와 최대공배수
* 유클리드 호제법 > 두 양의 정수 a, b(a>b)에 대하여 a = bq + r(o<= r < b)이라 하면, a와 b의 최대공약수는 b과 r의 최대공약수와 같다. - 즉 gcd(a, b) = gcd(b,r) > 만약 r = 0이라면 a와 b의 최대공약수는 b가 된다. +) 최대공배수는 (a * b) / (최대공약수) 다. |
def solution(n, m):
answer = []
a, b = max(n,m), min(n,m)
t = 1
while t > 0 :
t = a%b
a, b = b, t
answer.append(a)
answer.append(n*m/a)
return answer
> lambda와 재귀를 활용해 유클리드 호제법으로 푼 풀이
def solution(n, m):
gcd = lambda a,b : b if not a%b else gcd(b, a%b)
lcm = lambda a,b : a*b//gcd(a,b)
return [gcd(n, m), lcm(n, m)]
40번 3진번 뒤집기
def solution(n):
answer = []
while True :
if n < 3 :
answer.append(n)
break
else :
answer.append(n%3)
n = n//3
cnt = 0
a = 0
for i in range(len(answer)):
a = a + answer[-i-1]*3**cnt
cnt += 1
return a
> 다른 답
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
#몫이 0이 될 때까지 실행
answer = int(tmp, 3)
#int함수 활용
return answer