본문 바로가기

programming/코테연습

[python] 프로그래머스 3진법 뒤집기 - level1

728x90
반응형

파이썬이 너무 좋다..

사랑에 빠진것만 같아..

 

 

일단 문제부터 보세요

 

3진법 뒤집기

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


제한사항

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

입출력 예

nresult

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 해야 합니다.

 

돌아가면서 하나씩 문제를 고르는데 별로 안어려워 보여서 이걸 선택했다 내가..

 

def solution(n):
    answer = ''
    
    while n>0:
        n,re=divmod(n,3)
        answer+=str(re)
    answer=int(answer,3)
    return answer

 

프로그래머스 문제 자체에서는 answer을 처음부터 int로 받고 있으나, 편의상 문자열로 바꿔주는것이 좋다

 

수학머리가 빠르지 못해서 그냥 직접 나눠보는게 빨랐는데

다행이도 divmod라는 함수가 있어서 쉽게 풀 수 있었다. 

 

원래대로 라면 나눈 나머지를 문자열에 넣어서 그걸 다시 거꾸로 써야 3진법으로 변환이 되는건데

여기선 3진법을 뒤집으라 했으니 그냥 나눈 나머지를 차례대로 더해주기만 하면 됐다. 

 

while n>0: #몫이 1이면 종료하도록
        n,re=divmod(n,3) # 몫, 나머지=(나누는 수, 나눌 수)
        answer+=str(re) #문자열로 나머지를 계속해서 더함

 

divmod는 몫과 나머지를 따로따로 저장할 수 있다. 아주 편리하고 좋다

 

3 | 11 --2
3 | 3  --0
	1

 3진법을 구하는 과정

이걸 꼭 한번 해봐야 머리속에서 이해가 가서 써봤다. 

원래대로 3진법을 구현하면 102여야 하지만, while문을 돌리면 201순서로 저장이 되고, 이게 문제에서 원하는 3진법을 뒤집은 수이다. 

 

그리고 이걸 아주 쉽게 다시 10진법으로 변환해주는 int()함수

answer=int(answer,3)

 이전에도 int()는 썼었는데, 기본이 10진법이기에 생략된거라고 한다.

 

짧은 문제였지만 이것저것 배우게 된거 같아 기분은 좋다

728x90
반응형