프로그래머스 LV1 3진법 뒤집기

프로그래머스 LV1 3진법 뒤집기

2021, Mar 31    

프로그래머스 lv1 3진법 뒤집기

while 활용에 익숙해져야 함

몫과 나머지를 반환하는 함수 divmod(n, base) 이걸 n, r = divmod(n, base)로 사용


풀이

def solution(n):
    base_3 = []
    temp =[] 
    while n > 0:
        n, r = divmod(n, 3)
        print(r)
        base_3.append(r)

    print(base_3)
    multi = 1
    for i in reversed(base_3):
        print("i:",i)
        print("multi:",multi)
        multiply = (i * multi)
        temp.append(multiply)
        print("temp:",temp)
        multi *=3
#         temp = ''.join(map(str, reversed(base_3)))
    return sum(temp)
        

if __name__ == '__main__':
    n = 45
    print(solution(n))
# 다른 사람 풀이
def solution(n) :
    answer = 0
    temp = ''   # 3진법으로 결과를 저장할 변수

    # 문제에서 보여준 입출력 예시의 단계 중
    # n (3진법)을 건너 뛰고 n(10진법) -> 앞뒤 반전(3진법)으로 바로 진행
    while n :
        temp +=  str(n % 3)
        n = int(n / 3)


    multi = 1   # 3의 승수 계산용 변수
    for i in reversed(temp) :
        answer += int(i) * multi    # 자릿값 * 3의 승수 를 통해 10진수로 변환
        multi *= 3

    return answer

if __name__ == '__main__':
    n = 45
    print(solution(n))

승수 계산용 변수를 만들어서 곱하는 방식

# 다른 사람 풀이2
def n_ary(n, base):
    result = []
    while n > 0:
        n, r = divmod(n, base)
        result.append(r)
    return ''.join(map(str, reversed(result)))

def an_solution(n):
    b3 = n_ary(n, 3)
    b3 = b3[::-1]
    return int(b3, 3)

if __name__ == '__main__':
    n = 45
    print(an_solution(n))

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges