NIRVANA

[level 1] 3진법 뒤집기 본문

Coding test(Python3)/Programmers

[level 1] 3진법 뒤집기

녜잉 2023. 7. 18. 13:14

문제 

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

 

 

문제 접근법

1) 입력받은 n을 3으로 나누어 3진법으로 변환한다. (이때, 거꾸로 저장되므로 다시 뒤집어줘야 원래 수가 나온다)

2) str형인 3진법을 list로 변환한 뒤, 뒤집는다.

3) 다시 str형으로 변환한 후, 10진법으로 변환한다. 

참고: https://velog.io/@code_angler/파이썬-진수변환2진법-3진법-5진법-10진법n진법

 

파이썬 진수변환(2진법, 3진법, 5진법, 10진법)[n진법]

python에서는 기본적으로 int() 라는 함수를 지원한다int(string, base)2051104185276710진수로 변경이 가능하다.2, 8, 16진수는 bin(), oct(), hex() 함수를 지원한다.0b10110o130xb0b는 2진수, 0o는 8진수,

velog.io

def solution(n):
    answer = 0
    num =''
    
    while n>0:
        n, mod = divmod(n, 3)
        num += str(mod)
    
    num = num[::-1]
    num_list = list(num)
    num_list.reverse()
    num = ''.join(num_list)
    
    answer = int(num, 3)
    return answer

 

divmod라는 함수가 있다는 걸 처음 알았다. 

divmod는 몫과 나머지를 튜플 형태로 반환해준다고 한다!

작은 숫자를 할 때는 //, %보다 느리지만 큰 숫자일 경우 divmod함수가 더 빠르다고 한다.

참고: https://school.programmers.co.kr/learn/courses/4008/lessons/12732

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


다른 분들 풀이

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

    answer = int(tmp, 3)
    return answer

이 코드를 보고 나 바보다...를 확신함

어차피 뒤집어져서 나오는데 그걸 왜 또 뒤집고 난리를 쳤을까...

그냥 거기서 바로 10진법으로 바꾸면 되는데...

반성합니다