Programmers - 3진법 뒤집기(Java)

문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예

nresult
457
125229

입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
45120000217
  • 따라서 7을 return 해야 합니다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
1251112222111229
  • 따라서 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;
    }
} 

(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) : 해당 문제는 다 Integer의 메소드만 사용해서 풀었다. 첫 번째 풀이보다 실행 기간이 비약적으로 줄어들었다.
(2) : 10진수 n을 3진법으로 변환해서 ten_to_three에 대입
(3) : 구해진 3진법 ten_to_three를 뒤집기 위해 StringBuffer를 활용

📝 결과

😃 느낀점

  • 첫 번째 풀이에서의 결과는 통과는 했었어도, ms(실행 결과의 실행 속도)가 전반적으로 높게 측정됐다. 이 때문에 좀 더 ms를 줄이기 위해 for문을 대체할 Integer를 생각해냈다. 다행히 ms가 줄어들었다.

👍 Irish의 모든 코드 보기

-> Irish Github

좋은 웹페이지 즐겨찾기