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