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))
앞에서 적었던 코드들 중에서 겹치는 부분들이나 없어도 될 부분들을 삭제한 후 간결하게 만들어 보았다.
출처
'항해 전 > 스터디(Python 알고리즘)' 카테고리의 다른 글
로또의 최고 순위와 최저 순위 (0) | 2021.10.29 |
---|---|
같은 숫자는 싫어 (0) | 2021.10.26 |
소수 만들기 (0) | 2021.10.25 |
완주하지 못한 선수 (0) | 2021.10.24 |
8조 첫번째 스터디 회의 (2) | 2021.10.20 |
댓글