문제 설명
자연수 n이 매개변수로 주어집니다.
n을 3진법 상에서 앞뒤로 뒤집은 후,
이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n | result |
45 | 7 |
125 | 229 |
나의 풀이 (전체 코드)
def solution(n):
answer = []
sum = 0
while(n != 0):
answer.append(n%3)
n = n // 3
answer.reverse()
for i in range(len(answer)):
sum += answer[i] * (3**i)
return sum
처음 문제를 접하고 나서 3진법이란 게 있나?라는 생각을 짧게 했다
우선 문제를 풀기 전에 위의 사진처럼 예시가 적용되도록 간단한 표를 메모장에 작성하였다.
while(n != 0):
answer.append(n%3)
n = n // 3
우선 주어진 매개변수 자연수 n이 0이 아닐 때만 계산되도록 반복문을 선언해준다.
그다음 answer라는 리스트에 n을 3으로 나눈 나머지값(%)를 삽입해주고, n은 n으로 나눈 몫으로 설정한다.
만약 예시처럼 45가 주어졌다면,
① answer 라는 리스트의 첫 번째 인자는 45%3의 값인 0이 삽입되고, n의 값은 45를 3으로 나눈 몫인 15로 설정된다.
② answer 라는 리스트의 두 번째 인자는 15%3의 값인 0이 삽입되고, n의 값은 15를 3으로 나눈 몫인 5로 설정된다.
③ answer 라는 리스트의 세 번째 인자는 5%3의 값인 2가 삽입되고, n의 값은 5를 3으로 나눈 몫인 1로 설정된다.
④ answer 라는 리스트의 네 번째 인자는 1%3의 값인 1이 삽입되고, n의 값은 1을 3으로 나눈 몫인 0으로 설정된다.
※ 최종적으로 answer라는 리스트는 [0, 0, 2, 1]로 설정되었다.
주어진 문제에서는 n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 해야 하기 때문에
answer.reverse()
reverse() 함수를 사용하여 순서를 뒤집어준다.
위에서 계산했던 answer 리스트 [0, 0, 2, 1]의 값은 reverse() 함수를 통하여 [1, 2, 0, 0]으로 바뀌게 된다.
for i in range(len(answer)):
sum += answer[i] * (3**i)
그 뒤부터는 반복문을 통하여 계산해주면 된다.
마지막은 return 해주면 정답!
'문제풀이' 카테고리의 다른 글
[프로그래머스] level1 약수의 개수와 덧셈(python) (0) | 2022.05.27 |
---|---|
[프로그래머스] level1 로또의 최고 순위와 최저 순위(파이썬) (0) | 2022.05.24 |
[백준] 1408번 파이썬 풀이 (0) | 2022.04.01 |
[백준] 1173번 파이썬 풀이 (0) | 2022.04.01 |
[백준] 1371번 파이썬 풀이 (0) | 2022.03.28 |