[프로그래머스][LV.1] 3진법 뒤집기 | python3
2025. 1. 20. 00:35ㆍ프로그래머스/LV.1
문제 링크: 3진법 뒤집기
문제 설명
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
문제 풀이
처음엔 if n<3:을 밑에다가 둔 뒤 풀었는데 테스트1에서 틀렸길래 왜 틀렸을까 생각해보니까 n이 1일때와 2일때가 있으니 if문을 위에 둬야 하는 거였다.
3진법은 정수를 3으로 나눈 몫과 나머지를 이용하여 만들 수 있다. 몫을 3보다 작아질때까지 계속 나누고 나머지를 거꾸로 거슬러 올라간 수가 3진법인데 문제에서는 3진법을 반대로 한 수를 구한다. 그렇기때문에 3으로 나눈 나머지를 차례대로 추가해주면 된다.
내코드
def solution(n):
answer = 0
str_n=''
while True:
if n<3:
str_n+=str(n)
break
str_n+=str(n%3)
n//=3
for i in range(len(str_n)):
answer+=int(str_n[i])*(3**(len(str_n)-1-i))
return answer
더보기
다른사람풀이
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
맞다...int에는 진법을 바꾸어주는 기능이 있었다.
그리고 마지막에는 3보다 작은 몫만 나오기 때문에 즉 이값이 나머지가 되고 n이 0이 될때까지 //로 몫을 구하면 저절로 while문에서 빠져나올 수 있다.
'프로그래머스 > LV.1' 카테고리의 다른 글
[프로그래머스][LV.1] 가장 가까운 같은 글자 | python3 (0) | 2025.01.20 |
---|---|
[프로그래머스][LV.1] 최소직사각형 | python3 (0) | 2025.01.20 |
[프로그래머스][LV.1] 예산 | python3 (0) | 2025.01.20 |
[프로그래머스][LV.1] 크기가 작은 부분 문자열 | python3 (0) | 2025.01.19 |
[프로그래머스][LV.1] 같은 숫자는 싫어 | python3 (0) | 2025.01.19 |