📊 Algorithm&SQL

[Java/프로그래머스] 3진법 뒤집기

오늘 ONEUL 2022. 11. 19. 12:52

문제

 

 

 

풀이

(1) 문제 분석하기

 

10진법 → 3진법

  • 먼저 3진법을 어떻게 도출해내는지 알아보자.

이건 2진법

  • 10진법으로 표현되어 있는 수를 3으로 계속 나눈 나머지를 뒤에서부터 올린다.
  • 45를 3진법으로 나타내면 1200이다.

 

3진법 → 10진법

  • 다시 3진법을 10진법으로 변환해보자.
45 = ( 1 X 3³ ) + ( 2 X 3² ) + ( 0 X 3¹ ) + ( 0 X 3 )

 

다시 문제로 돌아와서,

  • 데이터 삽입이 자유롭고, 인덱스로 접근이 쉬운 Arraylist를 이용하였다.
  • 반복문을 통해 3으로 계속 나눈 나머지를 list로 add() 한다.
  • 포인트는 굳이 3진법 앞뒤반전을 하지 않아도 곱해주는 3의 n승으로 조정할 수 있다는 것이다.
  • 10진법으로 변환할 때는 제곱 함수 Math.pow(밑, 지수)를 이용한다.

 

(2) 슈도코드 작성하기

3진법 수를 담을 Arraylist 선언

while(n이 0보다 클 때) {
	list에 n % 3 값을 add()
    n을 3으로 나누고 그 값을 다시 n에 담음
}
// list = {0, 0, 2, 1}

for(list의 size까지) {
	list의 요소에 하나씩 접근하여 3의 3승 ~ 3의 0승까지 곱한 후 더하기
}
// ( 0 x 3³ ) + ( 0 x 3² ) + ( 2 x 3¹ ) + ( 1 x 3 )

 

(3) 코드 구현하기

package algorithm.test13;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Solution {
    // 10진법 -> 3진법으로 변환 후 list 삽입
    // 다시 10진법으로

    public static void main(String[] args) {
        int n = 45;
        System.out.println(solution(n));
    }
    public static int solution(int n) {
        int answer = 0;

        List<Integer> temp = new ArrayList<>();
        // 3진법으로 변환하여 list에 담기
        while (n > 0) {
            temp.add(n % 3);
            n /= 3;
        }

        for (int i = 0; i < temp.size(); i++) {
            answer += (Math.pow(3, temp.size()-i-1)*temp.get(i));
        }

        return answer;
    }
}

 

 

+) 다른 풀이 방법

  • N진수를 10진수로 변환할 때 → Integer.parseInt(N진수, N)
  • N진수의 타입은 String이기 때문에 list가 아닌 String으로 3진법 수를 받는다.
package algorithm.test13;

public class Solution {
    // 10진법 -> 3진법으로 변환 후 String에 담기
    // Integer.parseInt() 이용해서 다시 10진법으로

    public static void main(String[] args) {
        int n = 45;
        System.out.println(solution(n));
    }
    public static int solution(int n) {
        String str = "";
        while(n > 0) {
            str += n % 3;
            n /= 3;
        }
        return Integer.parseInt(str, 3);
    }
}

 

 

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr