Algorithm/프로그래머스

세무민의 알고가자 : 프로그래머스 3진법 뒤집기 문제 풀기

세기루민 2021. 3. 4. 10:41
728x90

최근에 면접 준비하느라 포스팅을 못했는데

면접이 끝나서 오늘 일어나자마자 푼 문제를 포스팅 해보려구 합니다! 

오늘 푼 문제는 3진법 뒤집기!


문제 설명 & 제한 사항 & 입출력 예시


풀이

이번 문제는 담백 그 자체! 

사실 어렵지 않다.

10진법 -> 3진법 -> 역순 -> 10진법

위에 조건처럼 구현해주면 되는데 여기서 리스트를 이용하면 역순부분을 사용하지 않아도 된다.

즉! 10진법 -> 3진법 -> 10진법

바로 코드를 보도록 하자!


# 첫번째 코드

def solution(n):
    result = []
    count = n
    while count > 0:
        tmp = count % 3
        result.append(tmp)
        count = int(count / 3)


    i, check = -1, 0
    answer = 0
    while check < len(result):
        if check == 0:
            answer += (result[i]) * 1
            i -= 1
            check += 1
        elif result[i] == 0:
            i -= 1
            check += 1
            continue
        else:
            answer += (result[i] * (3 ** check))
            i -= 1
            check += 1

    return answer

먼저 첫번 째 while문에서는 3진법으로 변환시켜준다.

두번째 while에서는 10진수로 변환해주는데 

이 과정에서 현재는 check를 이용했지만 굳이 이렇게 안해도 된다.

check라고 사용한 건 3의 check승, 즉 제곱을 위한 값

실제로 check가 0일 때 조건을 주지 않고 그냥 제곱근을 해도 무관할 것이다.

그렇게 된다면 코드가 더 간결해진다.

# 최종 코드

def solution(n):
    result = []
    count = n
    while count > 0:
        tmp = count % 3
        result.append(tmp)
        count = int(count / 3)


    i, check = -1, 0
    answer = 0
    while check < len(result):
            answer += (result[i] * (3 ** check))
            i -= 1
            check += 1

    return answer

위에 코드처럼 작성하면 역순으로 제곱근 값을 확인할 수 있다.

끄읕!


최근 면접보느라 정신이 없어서 포스팅을 자주 못했지만

좀 더 좋은 포스팅으로 찾아오겠습니다.

728x90