[Python]프로그래머스_Lv1 : 3진법 뒤집기

Alal11·2022년 8월 1일
0
post-thumbnail

출처

https://school.programmers.co.kr/learn/courses/30/lessons/68935?language=python3


문제 설명

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


제한사항

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

입출력 예

nresult
457
125229

입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
45120000217
  • 따라서 7을 return 해야 합니다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
1251112222111229
  • 따라서 229를 return 해야 합니다.

➡️문제 분석

<10진수를 n진수로 바꾸는 방법>

바꾸고자 하는 10진수를 몫이 0이 될 때 까지 n으로 나눠주고, 나머지를 아래방향 부터 읽어주면 된다.


➡️코드(⭕)

def solution(n):
    
    answer = ''
    
    while n > 0:
        n, r = divmod(n, 3)			# n을 3으로 나눈 몫과 나머지를 튜플 형식으로 반환
        answer += str(r)			# 숫자를 문자로 변환 후 계속 이어 적기
    
    return int(answer, 3)			# 3진수 answer을 10진수로 변환

➡️코드 분석

  1. n > 0 일 때 까지 while 문으로 반복한다.

  2. divmod() 함수로 n을 3으로 나눈 몫과 나머지를 변수 n과 r에 넣어준다.

  3. 나머지인 r을 문자 형식으로 바꾼 후 answer에 차례대로 while문을 돌면서 넣어주면 3진법을 앞뒤 반전한 것과 같다. (문자끼리의 덧셈은 이어적기!)

  4. 마지막으로 answer을 10진수로 변환 후 값을 반환한다.

✍️<divmod() 함수>

:: 매개변수로 두개의 숫자를 입력받아 몫과 나머지를 튜플로 반환
ex) divmod(10, 3)이면 몫 3과, 나머지 1을 튜플 형식인 (3, 1)로 반환


➡️end

너무 어려워서 다른 분들의 코드를 가져와서 분석만 했다.. divmod(), str(), int() 등 처음 써본 함수가 많아서 코드는 짧지만 많이 어려웠다.

0개의 댓글