https://school.programmers.co.kr/learn/courses/30/lessons/68935
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
n은 1 이상 100,000,000 이하인 자연수입니다.
n | result |
---|---|
45 | 7 |
125 | 229 |
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<>();
int cnt = 0;
while (n > 0) {
// n이 3으로 나누어떨어질 때 list에 0을 삽입
if (n % 3 == 0) {
list.add(0);
n /= 3;
// n이 3으로 나누어떨어지지 않을 때 list에 나머지를 삽입
} else {
list.add(n % 3);
n /= 3;
}
}
// n = 45일 때
// list = [0, 0, 2, 1], 3진법의 역순으로 list에 저장된다
// list에서 역순으로 값을 반환하고
// cnt 값을 1씩 증가시키면서 10진법으로 변환
for (int i = list.size() - 1 ; i >= 0 ; i--) {
answer += list.get(i) * Math.pow(3, cnt++);
}
return answer;
}
}
class Solution {
public int solution(int n) {
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.append(n % 3);
n /= 3;
}
sb.reverse();
return Integer.parseInt(sb.toString(), 3);
}
}
생각해보니 어짜피 0도 결국 3으로 나눈 나머지인데 굳이 if else로 나눌 필요가 없었다.
더하여 StringBuilder 객체에 reverse() 메소드가 있다는 것도 알게되었고
Integer.parseInt(스트링, 진수)에서 바로 진수변환이 가능하다는 것을 알게되었다.
개발자로서 배울 점이 많은 글이었습니다. 감사합니다.