n을 3진수로 바꾸는 방법은
n을 더 이상 나눌 수 없을 때까지 3으로 나눈 나머지를 저장하면 된다.
예를 들어
45를 3으로 나누면 몫은 15 나머지는 0
15를 3으로 나누면 몫은 5 나머지는 0
5를 3으로 나누면 몫은 1 나머지는 2
1을 3으로 나누면 몫은 0 나머지는 1
이렇게 45를 3진법으로 변환하면 문제에서 요구하는 뒤집기를 하지 않아도 자연스럽게 뒤집어서 구해진다.
그리고 0021을 10진법으로 변환하는 것은 가장 끝자리부터 3의 0승 3의 1승... 3의 K승까지 곱하여 더해주면 된다.
예를 들어 0021을 10진수로 변환하면
1 * 3의 0승 + 2 * 3의 1승 + 0 * 3의 2승 + 0 * 3의 3승 이 되어
7로 나오게 된다.
최종 코드
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int n) {
int answer = 0;
// 3진법으로 변환해 리스트에 저장
List<Integer> list = new ArrayList<>();
int temp = n;
while(temp != 0) {
list.add(temp % 3);
temp /= 3;
}
// 10진법으로 변환하기 위한 지수 변수
int pow = list.size();
// 10진번 변환
for (int i=0; i< list.size(); i++) {
pow--;
answer += list.get(i) * (int)Math.pow(3,pow);
}
return answer;
}
}
문제를 다 풀고 나서 다른 분의 코드를 보니 내가 몰랐던 게 있었다.
Integer.parseInt를 항상 String을 Int로 변환하는 데에만 썼었는데
Integer.parseInt(String, radix) 처럼 진수 값을 넣어주면 자동으로 변환되어서 나온다.....
꼭 기억해두자...
다른 분 코드
class Solution {
public int solution(int n) {
String a = "";
while(n > 0){
a = (n % 3) + a;
n /= 3;
}
a = new StringBuilder(a).reverse().toString();
return Integer.parseInt(a,3);
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 실패율 (0) | 2021.11.23 |
---|---|
(Java) 프로그래머스 약수의 개수와 덧셈 (0) | 2021.11.20 |
(Java) 문자열 p와 y의 개수 (0) | 2021.11.13 |
(Java) 프로그래머스 2016 (0) | 2021.11.13 |
(Java) 프로그래머스 예산 (0) | 2021.11.13 |