https://programmers.co.kr/learn/courses/30/lessons/68935
이번 문제의 핵심은 진수에 대해 이해하는 것이다.
10진수를 n진수로 변환하는 과정은 해당 숫자가 0이 되기전까지 n으로 나눈 나머지를 차례대로 적고, n으로 나눈 수를 계속 n으로 나누면서 과정을 반복하면 된다.
10진수 45를 3진수로 변환하는 예시
45 / 3 = 15 ... 나머지 0
15 / 3 = 5 ... 나머지 0
5 / 3 = 1 ... 나머지 1
2 / 3 = 0 ... 나머지 2
이걸 뒤에서 부터 적으면 1200 이 된다. 그럼 다시 반대로,
3진수 1200을 10진수로 변환하는 예시
1 * 3³ + 2 * 3² + 0 * 3 + 0
= 27 + 18 + 0 + 0
= 45
끝의 자리를 제외하고 하나하나 씩 n진수의 제곱을 한 다음 해당 숫자를 곱해서 더하면 된다.
그럼 코드를 보자.
[작성코드]
class Solution {
public int solution(int n) {
int answer = 0;
String digit3 = get3digit(n);
System.out.println(digit3);
answer = get10digit(digit3);
return answer;
}
public String get3digit(int n) {
String res = "";
while(n > 0) {
res += Integer.toString(n % 3);
n = n / 3;
}
return res;
}
public int get10digit(String digit3) {
int res = 0;
for (int i = 0; i < digit3.length(); i++ ) {
int digit = Character.getNumericValue(digit3.charAt(i));
res += digit * Math.pow(3, digit3.length()-i-1);
}
return res;
}
}
문제에서 요구한 것은 10진법 -> 3진법 -> 3진법 앞뒤반전 -> 10진법인데
사실 스트링으로 앞에서부터 더해주면 이미 앞뒤반전된 상태의 결과가 나온다.
그리고 나는 3 -> 10과 10 -> 3으로 변환하는 메소드를 각각 작성하여 구현하였다.
진수변환만 이해하면 크게 어렵지 않다. 끝.
[깃허브링크]
'문제풀이 > 프로그래머스' 카테고리의 다른 글
제일 작은 수 제거하기 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.31 |
---|---|
예산 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.30 |
숫자 문자열과 영단어 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.27 |
다트게임 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.04 |
최대공약수와 최소공배수 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.29 |