10월 28일
오늘은 3진법 뒤집기라는 문제를 풀어 보았다.

입출력 예시는 사진에서 보이는 것처럼 45(10진법) -> 1200(3진법) -> 0021(앞뒤 반전(3진법)) -> 7(10진법)으로
출력하는 예시이다.
처음 풀어본 코드에서는 설명이 붙어 있어서 조금 복잡 해보이긴 한다.
def solution(n):
answer = 0
# 1. 3진법
rev_base = ''
while n > 0:
n, mod = divmod(n, 3)
# divmod를 사용하면 몫과 나머지를 알 수 있다.
rev_base += str(mod)
n = rev_base[::-1]
# 역순인 진수를 뒤집어 줘야 원래 반환 하고자 하는 base가 출력
# 2. 앞뒤 반전(3진법)
# 1) n = ''.join(reversed(n))
# 2)
# n_list = list(n)
# n_list.reverse()
# n = ''.join(n_list)
# 3)
n = n[::-1]
# 문자열을 [::-1]이라는 인덱스로 호출하면
# 아주 간단하게 해당 문자열을 뒤집은 결과를 반환한다.
# 3. 10진법
answer = int(n, 3)
return answer
print(solution(45))
print(solution(125))
이걸 좀 더 다듬어 본 코드는
def solution(n):
answer = 0
rev_base = ''
while n > 0:
n, mod = divmod(n, 3)
rev_base += str(mod)
answer = int(rev_base, 3)
return answer
print(solution(45))
print(solution(125))
앞에서 적었던 코드들 중에서 겹치는 부분들이나 없어도 될 부분들을 삭제한 후 간결하게 만들어 보았다.

출처
파이썬 진수변환(2진법, 3진법, 5진법, 10진법)[n진법]
python에서는 기본적으로 int() 라는 함수를 지원한다int(string, base)2051104185276710진수로 변경이 가능하다.2, 8, 16진수는 bin(), oct(), hex() 함수를 지원한다.0b10110o130xb0b는 2진수, 0o는 8진수,
velog.io
https://itholic.github.io/python-reverse-string/
[python] 문자열 거꾸로 출력하기 [::-1]
문자열 거꾸로 출력하기
itholic.github.io
https://programmers.co.kr/learn/courses/30/lessons/68935
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
'🛶 항해 전 > 스터디(Python 알고리즘)' 카테고리의 다른 글
로또의 최고 순위와 최저 순위 (0) | 2021.10.29 |
---|---|
같은 숫자는 싫어 (0) | 2021.10.26 |
소수 만들기 (0) | 2021.10.25 |
완주하지 못한 선수 (0) | 2021.10.24 |
8조 첫번째 스터디 회의 (2) | 2021.10.20 |
댓글