안녕하세요.
오늘은 10진수를 2진수로 바꾸는 방법과 그 외의 진수들의 변환에 대해 알아보겠습니다.
목차
10진수를 2진수로 바꾸는 법
먼저, 10진수 29를 2진수 11101로 바꾸는 과정은 다음과 같습니다.

1. 10진수를 2로 나누고 나머지를 배열에 기록합니다. (29 / 2 -> 14 / 2 -> 7 / 2... )
2. 10진수가 0보다 클 때까지 나눠주는 과정을 반복합니다. (3 / 2 -> 1 / 2 -> 0, 0보다 크지 않으므로 연산을 종료합니다.)
3. 기록한 나머지 배열을 거꾸로 읽어주면 2진수가 완성됩니다.
구현 코드 (1)
코드로 간략하게 구현하면 다음과 같습니다.
import java.io.*;
import java.util.*;
public class Main {
public static int[] binary = new int[20];
public static int length = 0;
public static void decimalToBinary(int decimal) {
// 10진수가 0보다 클 때까지 반복합니다.
while (decimal > 0) {
// 2로 나눈 나머지를 기록합니다.
binary[length++] = decimal % 2;
// 10진수를 2로 나눕니다.
decimal /= 2;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 0인 경우에는 length = 0이므로 아래에서 출력하지 못한다.
// 따라서 n = 0인 경우는 따로 처리해줘야한다.
if (n == 0) {
System.out.println("0");
return;
}
decimalToBinary(n);
for (int i = length - 1; i >= 0; i--) {
System.out.print(binary[i]);
}
}
}
위의 코드는 n = 0 인 경우를 별도로 처리해줘야해서 번거롭다는 단점이 있습니다.
그래서 n = 0을 별도로 처리 하지 않고도 정상적으로 출력하는 방법을 알아보겠습니다.
개선된 코드 (n = 0 별도 처리 없음)
while문의 조건을 true로하고,
n < 2인 마지막 케이스는 따로 처리해주면 n = 0이어도 정상적으로 작동합니다.
import java.util.Scanner;
public class Main {
public static final int MAX_DIGIT = 20;
public static int[] digits = new int[MAX_DIGIT];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int cnt = 0;
while(true) {
if(n < 2) {
digits[cnt++] = n;
break;
}
digits[cnt++] = n % 2;
n /= 2;
}
for(int i = cnt - 1; i >= 0; i--)
System.out.print(digits[i]);
}
}
'ALGORITHM' 카테고리의 다른 글
| 구간 칠하기 (0) | 2025.04.17 |
|---|---|
| 날짜와 시간 계산 - 시뮬레이션 [알고리즘] (1) | 2025.04.10 |
| [알고리즘] 비트마스크 (Bitmask) (1) | 2024.12.24 |
| [Algorithm] 이분탐색 알고리즘 - Upper Bound/Lower Bound (0) | 2024.12.08 |
| [JAVA] Arrays.sort 와 Collections.sort의 차이 (1) | 2024.12.04 |