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