본문 바로가기
[스파르타코딩클럽]데이터분석 과정/PYTHON

[Python 코드카타] 39 ~ 40번(프로그래머스)

by doo_ 2024. 1. 14.

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