십진수를 2진수로, n진수를 m 진수로 - 진수 변환 [알고리즘/JAVA]

2025. 4. 11. 16:32·ALGORITHM

안녕하세요.

오늘은 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
    'ALGORITHM' 카테고리의 다른 글
    • 구간 칠하기
    • 날짜와 시간 계산 - 시뮬레이션 [알고리즘]
    • [알고리즘] 비트마스크 (Bitmask)
    • [Algorithm] 이분탐색 알고리즘 - Upper Bound/Lower Bound
    hyeblee
    hyeblee
    감자감자
    • hyeblee
      hyeblee
      hyeblee
    • 전체
      오늘
      어제
      • 분류 전체보기
        • PS
          • Programmers
          • BAEKJOON
          • CODETREE
        • ALGORITHM
        • JAVA
        • CS
          • 면접을 위한 CS전공지식
        • SPRING
        • 회고
    • 블로그 메뉴

      • 홈
      • 태그
      • 방명록
    • 링크

      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

      하한값
      spring #스프링 #스프링부트 #springboot #please sign in
      플레이데이터 백엔드
      숨바꼭질3
      플레이데이터 백엔드 부트캠프 후기
      BOJ
      자바
      java #deque #자바 #덱
      java #스프링부트 #자바버전 #자바 버전 충돌 #jvm
      구간 칠하기
      15652
      흐른 일수 계산
      백트래킹
      spring #springboot #스프링 #스프링부트
      반닫힌 구간
      플레이데이터 백엔드 후기
      java
      dfs
      16954
      플레이데이터 백엔드 부트캠프
      backjoon
      날짜와 시간 계산
      BFS
      왔다 갔던 구역2
      흐른 시간 계산
      상한값
      arrays.sort #collections.sort #list.sort #객체정렬 #배열정렬 #timsort #dual pivot quicksort #정렬 #자바
      백준
      탐색
      알고리즘
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    hyeblee
    십진수를 2진수로, n진수를 m 진수로 - 진수 변환 [알고리즘/JAVA]
    상단으로

    티스토리툴바