[알고리즘] 3진법 뒤집기 (프로그래머스 코딩테스트 기출문제)

god1hyuk·2022년 7월 18일
1

Algorithm Study

목록 보기
12/21
post-thumbnail
  • 문제 설명
    자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
  • 제한 사항
    n은 1 이상 100,000,000 이하인 자연수입니다.
  • 입출력 예
  • 입출력 예 설명
  1. 입출력 예 #1

따라서 7을 return 해야 합니다.
2. 입출력 예 #2

따라서 229를 return 해야 합니다.

나의 풀이

import java.util.Arrays;

public class Ternary {
    public int solution(int n) {
        int answer = 0;
        // 매개변수 n을 3진수로 변환 후 split 하여 ternaryArr 배열에 저장
        // 10진수 -> n진수 : Integer.toString(number(10진수), n(진수))
        String[] ternaryArr = Integer.toString(n, 3).split("");
        // 뒤집힌 ternaryArr을 저장할 배열 생성
        String[] flippedArr = new String[ternaryArr.length];

        // 반복 조건을 교차하여 ternaryArr 배열을 뒤집어 flippedArr에 저장
        for (int i = ternaryArr.length - 1, j = 0; i >= 0; i--, j++) {
            flippedArr[j] = ternaryArr[i];
        }

        // fllipedArr을 join()하여 문자열로 합친 후, 다시 10진수로 변환
        // n진수 -> 10진수 : Integer.parseInt(String(문자열 타입의 3진수), n(현재 진수))
        answer = Integer.parseInt(String.join("", flippedArr), 3);

        return answer;
    }
}

다른 사람의 풀이

import java.util.Arrays;

public class Ternary {
    // 진수 계산 공식을 사용하여 진수 변환
    public int solution(int n) {
        String a = "";

        while(n > 0){
            a = (n % 3) + a;
            n /= 3;
        }
        a = new StringBuilder(a).reverse().toString();

        return Integer.parseInt(a,3);
    }
}

0개의 댓글