코딩테스트/풀이

[시뮬레이션 / 진법계산] 숫자와 진법 변환

haenni 2025. 2. 11. 23:58

[시뮬레이션 / 진법계산] 숫자와 진법 변환

오늘은 숫자의 진법 변환을 시뮬레이션 방식으로 계산하는 방법에 대해 정리해보겠습니다. 진법 변환은 코딩 테스트에서 자주 출제되며, 여러 문제에서 활용할 수 있는 중요한 개념입니다. 😃

 

1. 숫자를 2진법으로 변환하기

숫자 29를 예로 들어, 이진법으로 변환하는 과정을 설명해보겠습니다.
29를 2로 나눈 후 몫과 나머지를 기록하며, 몫이 2보다 작아질 때까지 이 과정을 반복합니다.

📌 변환 과정

29 ÷ 2 → 몫: 14, 나머지: 1
14 ÷ 2 → 몫: 7, 나머지: 0
7 ÷ 2 → 몫: 3, 나머지: 1
3 ÷ 2 → 몫: 1, 나머지: 1
1 ÷ 2 → 몫: 0, 나머지: 1

결과적으로 나머지들을 거꾸로 읽으면 11101이 됩니다!

📄 코드 예시

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();         // 변환할 숫자 입력
        int[] arr = new int[20];        // 나머지를 저장할 배열
        int size = 0;                   // 배열 크기
        StringBuilder sb = new StringBuilder();

        while (num > 1) {
            arr[size] = num % 2;        // 나머지 저장
            num = num / 2;              // 몫을 갱신
            size++;
        }
        arr[size] = num;                // 마지막 남은 몫 저장

        for (int i = size; i >= 0; i--) {
            sb.append(arr[i]);          // 나머지를 역순으로 출력
        }

        System.out.println(sb.toString());
    }
}

 


2. 2진수를 10진법으로 변환하기

이제 2진수 11101을 10진법으로 변환해볼까요?

 

가장 왼쪽에서부터 오른쪽으로 차례로 읽으며 변환합니다.
예를 들어, 숫자가 11101이라면 다음과 같이 계산됩니다.

📌 변환 과정

초기 값: num = 0
첫 번째 자리: 1 → num = (0 * 2) + 1 = 1
두 번째 자리: 1 → num = (1 * 2) + 1 = 3
세 번째 자리: 1 → num = (3 * 2) + 1 = 7
네 번째 자리: 0 → num = (7 * 2) + 0 = 14
다섯 번째 자리: 1 → num = (14 * 2) + 1 = 29

결과적으로 10진수 값은 29가 됩니다!

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();     // 2진수 입력
        int result = 0;

        for (int i = 0; i < str.length(); i++) {
            int n = Character.getNumericValue(str.charAt(i));
            result = (result * 2) + n;  // 2진수 자릿값을 10진수로 변환
        }

        System.out.println(result);     // 결과 출력
    }
}

 


3. 여러 가지 진법 변환하기

마지막으로 n진법 변환을 살펴보겠습니다.
여기서는 주어진 숫자를 사용자가 입력한 진법으로 변환하는 방법을 설명합니다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();         // 변환할 숫자 입력
        int n = sc.nextInt();           // 변환할 진법 입력
        int[] arr = new int[20];
        int size = 0;
        StringBuilder sb = new StringBuilder();

        while (num >= n) {
            arr[size] = num % n;         // 나머지 저장
            num = num / n;               // 몫 갱신
            size++;
        }
        arr[size] = num;                 // 마지막 남은 몫 저장

        for (int i = size; i >= 0; i--) {
            sb.append(arr[i]);           // 나머지를 역순으로 출력
        }

        System.out.println(sb.toString());
    }
}

 


 

오늘은 숫자의 진법 변환을 시뮬레이션 방식으로 구현하는 방법에 대해 알아보았습니다. 진법 변환은 개념을 이해하면 다양한 문제에 쉽게 응용할 수 있습니다! 😊 코딩 테스트나 문제 풀이에서 헷갈릴 때는 오늘 내용을 참고하여 해결해 보세요. 그럼 오늘도 즐거운 코딩 되세요!