Programmers - 3진법 뒤집기(Java)

문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
 
입출력 예
| n | result | 
|---|---|
| 45 | 7 | 
| 125 | 229 | 
입출력 예 설명
입출력 예 #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 해야 합니다.
 
✍ 코드 - 첫 번째 풀이
class Solution {
    public int solution(int n) {
       int answer = 0;
       String ten_to_three = "";
       // (1)
       while (n > 0) {
           int share = n / 3;
           int remainder = n % 3;
           if (remainder > 9) {
               ten_to_three = (char) (remainder + 55) + ten_to_three;
           } else {
           	ten_to_three = remainder + ten_to_three;
           }
           n = share;
       }
       	// (2)
   		StringBuffer sb = new StringBuffer(ten_to_three);
   		String reverse_ten_to_three = sb.reverse().toString();
   		answer = Integer.parseInt(reverse_ten_to_three, 3);
       return answer;
    }
} 
class Solution {
    public int solution(int n) {
       int answer = 0;
       String ten_to_three = "";
       // (1)
       while (n > 0) {
           int share = n / 3;
           int remainder = n % 3;
           if (remainder > 9) {
               ten_to_three = (char) (remainder + 55) + ten_to_three;
           } else {
           	ten_to_three = remainder + ten_to_three;
           }
           n = share;
       }
       	// (2)
   		StringBuffer sb = new StringBuffer(ten_to_three);
   		String reverse_ten_to_three = sb.reverse().toString();
   		answer = Integer.parseInt(reverse_ten_to_three, 3);
       return answer;
    }
} (1) : 10진수 n을 3진법으로 변환해서 ten_to_three에 대입
(2) : 구해진 3진법 ten_to_three를 뒤집기 위해 StringBuffer를 활용
✍ 코드 - 두 번째 풀이
// (1)
class Solution {
    public int solution(int n) {
       int answer = 0;
       String ten_to_three = "";
       // (2)
       ten_to_three = Integer.toString(n, 3);
       	// (3)
   		StringBuffer sb = new StringBuffer(ten_to_three);
   		String reverse_ten_to_three = sb.reverse().toString();
   		answer = Integer.parseInt(reverse_ten_to_three, 3);
       return answer;
    }
} 
// (1)
class Solution {
    public int solution(int n) {
       int answer = 0;
       String ten_to_three = "";
       // (2)
       ten_to_three = Integer.toString(n, 3);
       	// (3)
   		StringBuffer sb = new StringBuffer(ten_to_three);
   		String reverse_ten_to_three = sb.reverse().toString();
   		answer = Integer.parseInt(reverse_ten_to_three, 3);
       return answer;
    }
} (1) : 해당 문제는 다 Integer의 메소드만 사용해서 풀었다. 첫 번째 풀이보다 실행 기간이 비약적으로 줄어들었다.
(2) : 10진수 n을 3진법으로 변환해서 ten_to_three에 대입
(3) : 구해진 3진법 ten_to_three를 뒤집기 위해 StringBuffer를 활용
📝 결과
😃 느낀점
- 첫 번째 풀이에서의 결과는 통과는 했었어도, ms(실행 결과의 실행 속도)가 전반적으로 높게 측정됐다. 이 때문에 좀 더 ms를 줄이기 위해 for문을 대체할 Integer를 생각해냈다. 다행히 ms가 줄어들었다.
 
👍 Irish의 모든 코드 보기
-> Irish Github
Author And Source
이 문제에 관하여(Programmers - 3진법 뒤집기(Java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@irish/Programmers-3진법-뒤집기Java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)