View


10진법(decimal number) <-> 다른 진법 왔다갔다 하는 문제 풀이방법

😃 || 정리하는 이유
오랜만에 푸는 문제라 처음에 방황하고 차근차근 나눗셈부터 시작해서 패턴을 찾고 풀었다. 그랬더니 생각보다 시간이 너무 걸렸다. 진법 왔다갔다 하는 문제를 은근 많이 접하기 때문에 생각나는 김에 블로그에 정리!

😃 || 10진법을 2진법으로 만들기

우선 7을 예로 들어보자
7을 2로 나누면 몫은 3이 되고 나머지는 1이된다.
이제 3을 2로 나누면 몫은 1이되고 나머지는 1이된다.
더이상 나누어 지지 않으므로 여기서 계산을 끝내고 남은 몫과 나머지들을 거꾸로 써주면 된다.
글로 쓰면 이해가 안가니 그림으로 설명해보면 다음과 같다.

 

 

따라서 7을 2진법으로 나타내면 111(2)가 되는 것이다.

😃 || 이번엔 2진법을 10진법으로 만들기

이번엔 위에서 만든 111(2) 를 10진법으로 만들어보자.
2진법의 세계에선 숫자 2가 대빵이라 만들어진 각 자리의 수(오른쪽부터 0부터 시작)에 2의 거듭제곱을 해주면 된다

 

 

그리고 이 숫자들을 다 더해주면 다시 7이 나온다!

😃 || 풀이 방법

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> numList = new ArrayList<Integer>();
        int cnt = 0;

        int test = 0;

        while(n>=3){
            numList.add(n%3);
            n = n/3;
            cnt++;
        }
        numList.add(n);
        cnt = 0;

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

        return answer;
    }
}

문제는 3진법 뒤집기이지만 위와 같은 방식으로 풀어주면 된다.
나는 배열을 만들기엔 길이를 알 수 없기 때문에 ArrayList를 선언해서 나머지를 추가해주었다.
처음에는 while에 n>3을 해놓아서 문제를 통과할 수 가 없었다 😂

코드가 간결하지 않지만 차근차근 알고리즘을 풀어나갈 계획이다

Share Link
reply
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31