3진법 뒤집기

HeeSeong·2021년 6월 6일
0

프로그래머스

목록 보기
59/97
post-thumbnail

🔗 문제 링크

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


❔ 문제 설명


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


입출력 예 #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은 1 이상 100,000,000 이하인 자연수입니다.



💡 풀이 (언어 : Java & Python)


2, 8, 16진법 변환함수는 제공해주는데 다른 n진법 함수는 변환함수를 제공해주지 않아
따로 함수를 만들어서 변환해야 한다. 만드는 방법을 몰랐는데 이런 함수는 암기하면 좋을 듯 하다.
StringBuilder로 append해주면 뒤에서부터 각자리의 숫자를 붙여주므로 결과에서 요구하는 뒤집은 형태와 같게되어 별도로 다시 뒤집어 줄 필요가 없다.

Java

public class Solution {
    public int solution(int n) {
        StringBuilder sb = new StringBuilder();
        while (n > 0) {
            // 이미 결과 자리수들을 뒤에서 부터 붙이므로 마지막에 뒤집을 필요없다
            sb.append(n % 3);
            n /= 3;
        }
        // 3진법 숫자 문자열을 10진법 수로 변환
        return Integer.parseInt(sb.toString(), 3);
    }
}

Python

import string
# n진법 만들때 쓰는 문자열
tmp = string.digits + string.ascii_lowercase
# 진법 변환 함수, tmp 이용 문자열 반환
def convert(n, s):
    q, r = divmod(n, s)
    if q == 0:
        return tmp[r]
    else:
        return convert(q, s) + tmp[r]
    
def solution(n):
    # 3진법 변환한 문자열 반환
    threeNum = convert(n, 3)
    # 문자열 뒤집기
    reversedString = threeNum[::-1]
    # n진법 문자열을 10진법 정수로 변환
    answer = int(reversedString, 3)    
    
    return answer
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글