Coding Test/Java Coding Test

[프로그래머스 / 자바] - 3진법 뒤집기

nam_ji 2024. 2. 19. 00:13

3진법 뒤집기

문제

  • 정수 n이 매개변수로 주어집니다.
    1. n을 3진법 변환 후
    2. 3진법을 뒤집은 후
    3. 다시 10진법으로 변환하는 문제입니다.


테스트 (인텔리제이)

  • Integer 클래스의 toString을 이용하여 각 진법별로 변환이 가능하여 toString 메서드를 사용하여 변환했습니다
    * String 타입으로 값을 담아줘야 합니다.
  • 이후 StringBuilder의 reverse를 이용하여 3진법으로 변환해준 값을 뒤집어 줍니다.
  • 3진법에서 10진법으로 변환하기 위해 String 타입으로 변환하고
  • Integer 클래스의 parseInt 메서드를 이용하여 3진법을 10진법으로 변환하면 됩니다.
  • 두번째 풀이도 첫번째랑 같은 풀이지만 더 복잡하게 풀어둔 제 풀이입니다.
  • 세변째는 간단하고 좋은 풀이 같아서 가져오기는 했지만 해석이 필요한 정답입니다.
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        /*
        정수 n이 매개변수로 주어집니다.
        1. n을 3진법으로 변환
        2. 3진법으로 변환된 n 뒤집기
        3. 뒤집어진 n을 10진법으로 변환
        초기 n은 10진법입니다.
        45 > 7
        45 -> 1200 -> 0021 -> 7
        125 > 229
        125 -> 11122 -> 22111 -> 229
         */
        int n = 45;

        String third = Integer.toString(n,3);
        StringBuilder sb = new StringBuilder(third);
        String reverse = sb.reverse().toString();
        System.out.println(Integer.parseInt(reverse, 3));

//        String threeN = Integer.toString(n, 3);
//        StringBuilder reverse = new StringBuilder();
//        for (int i = threeN.length() -1; i >= 0; i--) {
//            reverse.append(threeN.charAt(i));
//        }
//        int newN = Integer.parseInt(String.valueOf(reverse), 3);
//        System.out.println(newN);

//        String a = "";
//
//        while (n > 0) {
//            a = (n % 3) + a;
//            n /= 3;
//        }
//        a = new StringBuilder(a).reverse().toString();
//        System.out.println(Integer.parseInt(a, 3));
    }
}

프로그래머스 코드

class Solution {
    public int solution(int n) {
        
        String third = Integer.toString(n,3);
        StringBuilder sb = new StringBuilder(third);
        String reverse = sb.reverse().toString();
        
        return Integer.parseInt(reverse, 3);

//        String threeN = Integer.toString(n, 3);
//        StringBuilder reverse = new StringBuilder();
//        for (int i = threeN.length() -1; i >= 0; i--) {
//            reverse.append(threeN.charAt(i));
//        }
//        int newN = Integer.parseInt(String.valueOf(reverse), 3);
//        return newN;

//        String a = "";
//
//        while (n > 0) {
//            a = (n % 3) + a;
//            n /= 3;
//        }
//        a = new StringBuilder(a).reverse().toString();
//        return Integer.parseInt(a, 3);
    }
}