본문으로 바로가기

📘문제 설명

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

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


📌 제한조건

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

💡 개념 설명

  • 3진법 변환 및 뒤집기: 이 0보다 클 때까지 3으로 나눈 나머지를 구하여 StringBuilder에 추가합니다. 이 과정(n % 3 연산과 sb.append()) 자체가 3진법 변환과 뒤집기를 동시에 수행합니다.
  • 자릿수 제거: 나머지 연산 후,  3으로 나누어(n /= 3) 다음 자릿수를 준비합니다.
  • 10진법 변환: StringBuilder에 저장된 뒤집힌 3진법 문자열을 기수 3을 지정하여 Integer.parseInt(String, 3)메서드로 10진수 값으로 변환합니다.
  • 결과 반환: 최종 10진수 값을 반환합니다.

📎 입출력 예시


📎 코드

public class Solution {
    public int solution(int n) {
        StringBuilder sb = new StringBuilder();
        
        // 1. 3진법 변환 및 뒤집기 
        while (n > 0) {
            sb.append(n % 3); 
            n /= 3;           
        }
        
        // 2. 뒤집힌 3진법 문자열을 다시 10진법으로 변환
        return Integer.parseInt(sb.toString(), 3);
    }

    public static void main(String[] args) {
        Solution sol = new Solution();

        // 테스트 케이스
        int n1 = 45;  // 10진수 45 -> 3진법 1200 -> 뒤집기 0021 -> 10진수 7
        int n2 = 125; // 10진수 125 -> 3진법 11122 -> 뒤집기 22111 -> 10진수 229

        System.out.println("n = " + n1 + ", 결과: " + sol.solution(n1)); // 예상 출력: 7
        System.out.println("n = " + n2 + ", 결과: " + sol.solution(n2)); // 예상 출력: 229
    }
}

 


📎 결과