[프로그래머스] 68935번 - 3진법 뒤집기 [Java]

2026. 4. 30. 12:55·프로그래머스
 

프로그래머스

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

programmers.co.kr

 

 


 

 

문제

 

 

제출한 코드

class Solution {
    public int solution(int n) {
        
        StringBuilder sb = new StringBuilder();
        
        while (n > 0) {
            sb.append(n % 3);
            n /= 3;
        }
        
        return Integer.parseInt(String.valueOf(sb), 3);
    }
}

 

 

풀이

n진법으로 변환하는 로직은 아래와 같다.

// 변환하려는숫자 = x, 사용하려는진법 = n 이라고 가정

while (x > 0) {
    sb.append(x % n);
    x /= n;
}

 

문제의 입출력 예시와 같이 45를 3진법으로 변환하기 위해 위의 로직대로 진행한다면 아래와 같은 순서로 진행될 것이다.

횟수 x n 나머지 계산 결과 나누기 결과
1 45 3 45 % 3 0 45 / 3 15
2 15 3 15 % 3 0 15 / 3 5
3 5 3 5 % 3 2 5 / 3 1
4 1 3 1 % 3 1 1 / 3 0

 

따라서 해당 결과를 거꾸로 뒤집으면 1200이 되고 이 숫자가 45를 3진법으로 변환한 숫자가 된다.

하지만 문제에서 앞뒤반전을 시키라고 했으므로, StringBuilder를 따로 reverse 하지 않아도 0021 이라는 값이 잘 들어가게 된다.

마지막으로 parseInt() 를 사용해서 3진법으로 변환된 sb 의 값을 10진법으로 다시 변환해주면 올바른 결과가 나오게 된다.

 

parseInt() 를 통해 진법 변환을 할 수 있는지 몰랐다. 두 번째 인자로 진법에 대한 숫자를 입력받게 되는데,

예를 들어 parseInt("0021", 3) 이라고 가정하면 3진법으로 변환된 0021 이라는 숫자(문자)를 10진법으로 바꿔서 반환해준다.

 

이 방법을 몰랐을 때는 아래와 같이 코드를 작성해서 제출했었다.

class Solution {
    public int solution(int n) {
        
        StringBuilder sb = new StringBuilder();
        
        while (n > 0) {
            sb.append(n % 3);
            n /= 3;
        }
        
        sb.reverse();
        
        int[] arr = new int[sb.toString().length()];
        int[] arr2 = sb.toString().chars().toArray();
        
        int result = 0;
        
        for (int i = 0; i < arr.length; i++) {
            result += (int) (Math.pow(3, i) * (arr2[i] - '0'));
        }
        
        return result;
    }
}

 

딱 봐도 길고 복잡한 코드이다...

 

sb.reverse() 를 통해 int 배열인 arr2 를 선언해서 각 자리에 맞는 숫자를 넣어두고

Math.pow() 를 사용해서 result 값을 계산하는 방식으로 했었다.

parseInt() 의 진법변환 기능으로 인해 8줄의 코드를 단 1줄만으로도 이 문제를 풀 수 있게 되었다.

'프로그래머스' 카테고리의 다른 글

[프로그래머스] 12926번 - 시저 암호 [Java]  (0) 2026.05.08
[프로그래머스] 12930번 - 이상한 문자 만들기 [Java]  (0) 2026.05.04
[프로그래머스] 12950번 - 행렬의 덧셈 [Java]  (0) 2026.04.16
[프로그래머스] 12918번 - 문자열 다루기 기본 [Java]  (0) 2026.04.15
[프로그래머스] 82612번 - 부족한 금액 계산하기 [Java]  (0) 2026.04.14
'프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 12926번 - 시저 암호 [Java]
  • [프로그래머스] 12930번 - 이상한 문자 만들기 [Java]
  • [프로그래머스] 12950번 - 행렬의 덧셈 [Java]
  • [프로그래머스] 12918번 - 문자열 다루기 기본 [Java]
이서라다
이서라다
  • 이서라다
    개발일지
    이서라다
  • 전체
    오늘
    어제
    • 전체 보기 (79)
      • 내일배움캠프 (21)
        • TIL (21)
      • 프로그래머스 (23)
      • Algorithm (2)
      • BackEnd (0)
        • Spring (0)
      • Language (4)
        • JAVA (4)
      • Git (2)
      • 백준 - Java (25)
        • 입출력과 사칙연산 (6)
        • 반복문 (8)
        • 1차원 배열 (1)
        • 문자열 (7)
        • 2차원 배열 (1)
        • 조합론 (1)
        • 정렬 (1)
      • IDE (1)
        • IntelliJ (1)
      • 티스토리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    jdk삭제
    내일배움캠프
    til
    티스토리스킨
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이서라다
[프로그래머스] 68935번 - 3진법 뒤집기 [Java]
상단으로

티스토리툴바