기록하는삶

[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 3진법 뒤집기 본문

프로그래머스/프로그래머스_lv1(Python)

[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 3진법 뒤집기

mingchin 2021. 9. 8. 01:40
728x90
반응형

[문제 설명]

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

 

[제한 조건]

  • n은 1 이상 100,000,000 이하인 자연수입니다.

수학을 공부한게 부끄러운 코드였다,,

def solution(n):
    lst = []
    i = -1
    while 3**(i+1) <= n :
        i += 1
    while i >= 0 :
        if n - (3**i)*2 >= 0:
            n -= (3**i)*2
            lst.append(2)
        elif n - (3**i)>= 0:
            n -= (3**i)
            lst.append(1)
        else:
            lst.append(0)
        i -= 1
    cnt = len(lst)
    answer = 0
    while cnt >= 0 :
        cnt -= 1
        answer += (3**cnt) * lst[cnt]
    return int(answer)

아래는 제일 깔끔한 코드.

def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3

    answer = int(tmp, 3)
    return answer

3진법을 '뒤집는' 것이 문제의 목표이다. 그리고 진법의 기본은 나누기.

1) n을 3으로 나눈 나머지가 n을 3진수로 표현한 수의 맨 끝자리 -> tmp의 맨 앞으로

2) 다시 그 몫을 3으로 나눈 나머지가 n을 3진수로 표현한 수의 끝에서 두 번째 자리 -> tmp의 두 번째 자리로

3) 다시 그 몫을 3으로 나눈 나머지가 n을 3진수로 표현한 수의 끝에서 세 번째 자리 -> tmp의 세 번째 자리로

.....

while n에서 n==0이 되면 False로 해석되어 반복문이 종료되는 것까지,,

그리고 int의 새로운 기능을 알게 되었다.

이처럼 int(x,y) string으로 주어진 x가 y진법으로 표현된 것이라 할 때, 그 수를 10진법으로 변환한 숫자를 반환한다.

즉 위의 코드에서는 tmp에 3진법 표현을 뒤집어 string으로 모은 뒤, int를 이용해 변환하였다.

728x90
반응형