알고리즘

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

작은코딩 2022. 5. 19. 15:18

🔒 문제

https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

문제 설명

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

🔓 풀이

🔑 요구사항 파악

1. 요구사항 

 - 10진법 3진법으로 바꾸기

 -  3진법 숫자 뒤집기
 -  3진법 10진법으로 바꾸기

2. Type

 - Input | n: int

 - Output | answer: int


🔑 문제 해결 방법 고민하기

1. 10진법 3진법으로 바꾸기
 - 반복문 사용(while)
 - divmod() 함수 사용
2. 3진법 숫자 뒤집기
 - 10진법을 3진법으로 만드는 과정에서 이미 뒤집힌 숫자 사용
3. 3진법 10진법으로 바꾸기
 - int() 함수 이용하기

 

<고민의 흔적>

 


🔑 문제 해결 / 코드

def solution(n):
    answer = ""
    # 10진법 3진법으로 바꾸기 & 리버스
    while n > 0:
        n, remainder = divmod(n, 3)
        answer += str(remainder)

    # 리버스 된 3진법 10진법으로 바꾸기
    answer = int(answer, 3)
    return answer

print(solution(125))

 


💉 피드백

1. 정수 n을 x진법으로 만드는 과정을 생각할 때 n을 x로 나눠서 몫과 나머지를 이용해서 만드는 방법을 바로 떠올리지 못했다.

2. int() 함수에 x진법에서 10진법으로 만드는 기능이 있는걸 알게되었다.


📌 참고 블로그

https://velog.io/@code_angler/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A7%84%EC%88%98%EB%B3%80%ED%99%982%EC%A7%84%EB%B2%95-3%EC%A7%84%EB%B2%95-5%EC%A7%84%EB%B2%95-10%EC%A7%84%EB%B2%95n%EC%A7%84%EB%B2%95

 

파이썬 진수변환(2진법, 3진법, 5진법, 10진법)[n진법]

python에서는 기본적으로 int() 라는 함수를 지원한다int(string, base)2051104185276710진수로 변경이 가능하다.2, 8, 16진수는 bin(), oct(), hex() 함수를 지원한다.0b10110o130xb0b는 2진수, 0o는 8진수,

velog.io