NIRVANA
[level 1] 3진법 뒤집기 본문
문제
자연수 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진법
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
다른 분들 풀이
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
이 코드를 보고 나 바보다...를 확신함
어차피 뒤집어져서 나오는데 그걸 왜 또 뒤집고 난리를 쳤을까...
그냥 거기서 바로 10진법으로 바꾸면 되는데...
반성합니다
'Coding test(Python3) > Programmers' 카테고리의 다른 글
[level 1] 예산 (0) | 2023.07.18 |
---|---|
[level 1] 이상한 문자 만들기 (0) | 2023.07.18 |
[level 1] 같은 숫자는 싫어(다시??) (0) | 2023.07.17 |
[level 1] 최대공약수와 최소공배수 (0) | 2023.07.17 |
[level 1] 직사각형 별찍기 (0) | 2023.07.17 |