공부/코딩테스트

[프로그래머스] 최대공약수와 최소공배수, 콜라츠 추측, 핸드폰 번호 가리기

ghhong 2021. 1. 7. 15:08

나의 답(유클리드 호제법) :

def solution(n, m):
    answer = []
    r=0
    nn=0
    nm=0
    if n<m: n,m = m,n
    #n이 큰 수
    r=n%m
    if r==0:
        answer.append(m)
    else:
        nn=m
        nm=r
        while r!=0:
            r=nn%nm
            if r==0:
                answer.append(nm)
            else:
                nn=nm
                nm=r
    answer.append(int(n*m/answer[0]))    
    return answer

 

다른 사람의 답(더 간단한 풀이) :

def gcdlcm(a, b):
    c, d = max(a, b), min(a, b)
    t = 1
    while t > 0:
        t = c % d
        c, d = d, t
    answer = [c, int(a*b/c)]

    return answer

 

 

나의 답 :

def solution(num):
    count = 0
    if num==1:
        return 0
    while True:
        count += 1
        if count>500:
            return -1
        if num%2==0:
            num/=2
        else:
            num = (num*3)+1
        if num == 1:
            return count

나의 답 :

def solution(phone_number):
    a=phone_number[-4:]
    b=len(phone_number)-4
    return ("*"*b)+a