[ Programmers / CodingTest / Python ] 3진법 뒤집기

황승환·2022년 1월 18일
0

Python

목록 보기
103/498

문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예

n	result
45	7
125	229

입출력 예 설명
입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)	n (3진법)	앞뒤 반전(3진법)	10진법으로 표현
45	1200	0021	7

따라서 7을 return 해야 합니다.
입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)	n (3진법)	앞뒤 반전(3진법)	10진법으로 표현
125	11122	22111	229

따라서 229를 return 해야 합니다.

접근 방법

주어진 수를 n진법으로 나타내는 방법은 간단하다. while문의 조건의 주어진 수를 넣어 주어진 수가 0이 되면 종료되도록 설정하고, 빈 배열을 만들어 주어진 수를 n으로 나눴을 때의 나머지를 빈 배열에 넣고 주어진 수는 n으로 나눈 수로 갱신시켜준다. while문이 끝나면 주어진 수를 n으로 나눴을 때의 나머지를 저장한 빈 배열을 거꾸로 돌려주면 주어진 수에 대한 n진법 표현이 도출된다. 이 문제에서는 고맙게도 앞뒤 반전한 수를 원하므로 마지막 과정은 생략해야 한다. n진법을 10진법으로 바꾸기 위해서는 n**(n진법으로 나타낸 길이 - 1 - i) \* n진법으로 나타낸 수의 i번째 계수 를 모두 더해주면 구할 수 있다.

  • 정답을 저장할 변수 answer를 0으로 정의한다.
  • 3진법으로 표현한 수를 넣기 위한 배열 tmp를 선언한다.
  • n이 True일 동안(0이 아닐 동안) 반복하는 while문을 돌린다.
    -> tmp에 n%3을 넣어준다.
    -> n을 3으로 나눠준다.
  • tmp의 길이만큼 반복하는 i에 대한 for문을 돌린다.
    -> answer에 3**(len(tmp)-1-i)*tmp[i]를 더해준다.
  • answer를 반환한다.

solution.py

def solution(n):
    answer = 0
    tmp=[]
    while n:
        tmp.append(n%3)
        n//=3
    for i in range(len(tmp)):
        answer+=3**(len(tmp)-1-i)*tmp[i]
    return answer

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글