124 나라의 숫자

LJM·2023년 3월 24일
0

programmers

목록 보기
4/92

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

한참 숫자 적어보면서 패턴을 찾았는데

3진수에서 0을 4로 변환 하면 되었다. 그리고 그 변환된 숫자의 왼쪽을 내림해줘야 한다.
10(3진수) 이면 배열인덱스에 저장되 있다고 생각하고 0번은 1, 1번은 0이라고 하자.
1번자리 0이 내림해서 4가 되고 0번자리 1은 내림해서 0되면 4(124진수)가 되는 식이다.

근데 100(3진수) 이러면 복잡해진다.
배열인덱스에 저장되 있다고 생각하고 0번은 1, 1번은 0, 2번은 0 이라고 하자.
2번자리 숫자 0부터 내림해주면 4가된다.
104

1번자리 숫자를 내림 해줘야 하는데 이미 0이므로 한번더 내림 해줘야 한다. 그람 더블 내림 해주게 되면
2가 되어야 한다
124

0번자리 숫자는 내림해주면 0이된다. 그럼 결과는..
24(124진수) 가 된다.

십진수 27은 3진수로 1000 이다(0의자리는 1, 1의자리는 0, 2의자리는 0, 3의자리는 0)
이것을 124진수로 바꾸는 방법을 설명하겠다

1000
1004(3의자리 숫자 0을 내림 해주면 4가된다. 그러므로 2의 자리 숫자를 내림해줘야 한다)
1004(거기에 플러스로 2의 자리 숫자가 0이어서 내림한번 더 해줘야 한다는 사실!)
1024(2의 자리숫자는 2번 내림해줘서 2가 되었다. 그리고 1의 자리를 내림 해줘야 된다 근데 1의 자리가 0이므로 한번더 내림 해줘야 한다)
1244(1의 자리는 2가 되었다. 0의 자리를 내림해줘야 한다)
0244(0의 자리는 0이 되었다)

의 순서대로 변환하게 된다.

import java.io.*;
import java.util.*;

class Solution {
    public String solution(int n) {
        String answer = "";

        ArrayList<Integer> arr = new ArrayList<>();

        while(true)
        {
            arr.add(n%3);
            n/=3;

            if(n < 3)
            {
                arr.add(n);
                break;
            }
        }

        int floor = 0;
        for(int i = 0; i < arr.size(); ++i)
        {
            if(floor > 0)
            {
                if(arr.get(i) == 0)
                {
                    arr.set(i, 2);
                }
                else if(arr.get(i) == 4)
                {
                    arr.set(i, 2);
                    floor--;
                }
                else
                {
                    arr.set(i, arr.get(i)-1);
                    floor--;
                }
            }

            if(arr.get(i) == 0 && i != (arr.size()-1))
            {
                floor++;
                arr.set(i, 4);
            }
        }
        Long temp = 0L;
        for(int i = arr.size()-1; i >= 0; --i)
        {
            temp *= 10;
            temp += arr.get(i);
        }

        answer = String.valueOf(temp);
        return answer;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글