갓생사는 김초원의 개발 블로그
chocho_log
갓생사는 김초원의 개발 블로그
전체 방문자
오늘
어제
  • 분류 전체보기 (76)
    • 개발 (22)
      • Spring (4)
      • Java (3)
      • Database (2)
      • Elasticsearch (3)
      • ETC (3)
      • JPA (3)
      • 이슈 (1)
    • 코딩 테스트 (43)
      • 프로그래머스 (23)
      • 백준 (12)
      • TIP (8)
    • 자료구조 (2)
    • 알고리즘 (4)
    • 잡생각 (0)
    • 경험 (3)
      • AWS re:Invent 2024 (3)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 지연로딩
    • jpa
    • war
    • jar
    • Lazy Loading
    • querydsl
    • 디자인패턴 #SOLID 원칙
    • Spring Boot Embedded Tomcat

    최근 댓글

    최근 글

    갓생사는 김초원의 개발 블로그

    chocho_log

    [JAVA] 10진수 n진수로 변환하기
    코딩 테스트/TIP

    [JAVA] 10진수 n진수로 변환하기

    2020. 11. 21. 01:45

    10진수를 2진수로 변환하는 방법은 많이 알고들 있을 것이다. 

    10진수를 계속해서 2로 나누다가 몫이 0이 되면 그동안 나왔던 나머지들을 역순으로 나열하면 된다. 

     

    예를 들어 16을 2진수로 변환하는 방법은 다음과 같으며 2진수로 변환한 값은 10000(2)다.

     

    그럼 8진수, 16진수 등 N진수들은 ?

    방법은 똑같다. 대신 2진수는 계속 2로 나눠주었다면, n진수는 n으로 계속 나눠주면 된다. 

     

    1. 10진수 --> 8진수 

    10진수 126를 8진수로 변환해보자. 

    처음 126을 8로 나눈 몫은 15, 나머지는 6이다. 

    그 다음 위에서 나온 몫 15를 다시 8로 나누면 나머지가 7이고

    몫이 0일때 나머지는 역순으로 나열한 176(8)이 126을 8진수로 변환한 값이다. 

    ∴ 126(10) --> 176(8)

     

    2. 10진수 --> 16진수

    이번엔 126을 16진수로 변환해보자 

    126을 16으로 나누면 몫이 7, 나머지가 14다. 

    다음 7을 16으로 나누면 몫이 0, 나머지는 7이므로 역순으로 나열하면 714 이다. 

    그러나 우리가 표한할 수 있는 숫자는 0~9까지이기 때문에 10부터는 알파벳으로 대체하는 것이 진법의 규칙이다. 

    10 --> A

    11 --> B

    12 --> C

    13 --> D

    14 --> E

     

    따라서 126을 16진수로 변환한 값은 7E 이다. 

    ∴ 126(10) --> 7E(16)

     

    [JAVA code]

     // 10진수를 N진수로 변환
        public static String getConventN(int num, int n) {
            String result = "";
            if (num == 0) {
                return "0";
            }
    
            while (num > 0) {
                int share = num / n;
                int remainder = num % n;
                if (remainder > 9) {
                    result = (char) (remainder + 55) + result;
                } else {
                    result = remainder + result;
                }
                num = share;
            }
            return result;
        }

     

    [관련 문제]

    https://programmers.co.kr/learn/courses/30/lessons/17687

     

    코딩테스트 연습 - [3차] n진수 게임

    N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0

    programmers.co.kr

    package com.algorithm.kakaoTest.four;
    
    /**
     * n진수 게임 Lv.2
     * 소요시간: 45분 3초
     */
    public class Test01 {
        public static void main(String[] args) {
            int n = 2; // 진법 n
            int t = 4; // 구할 숫자의 갯수 t
            int m = 2; // 게임에 참가하는 인원 m
            int p = 1; // 튜브의 순서 p
    
            String answer = solution(n, t, m, p);
            System.out.println(answer);
        }
    
        public static String solution(int n, int t, int m, int p) {
            String answer = "";
    
            int num = 0;
            int totalCount = ((t - 1) * m) + p; // 돌아야 하는 총 순서의 수
            String totalOutput = " ";
            int count = 0;
            while (count < totalCount) {
                String N = getConventN(num, n); // 숫자를 N진수로 변환
                for (int i = 0; i < N.length(); i++) {
                    totalOutput += N.charAt(i);
                    count++;
                }
                num++;
            }
    
            for (int i = p; i < totalOutput.length(); i += m) {
                answer += totalOutput.charAt(i);
            }
    
            return answer.substring(0, t);
        }
    
        // 10진수를 N진수로 변환
        public static String getConventN(int num, int n) {
            String result = "";
            if (num == 0) {
                return "0";
            }
    
            while (num > 0) {
                int share = num / n;
                int remainder = num % n;
                if (remainder > 9) {
                    result = (char) (remainder + 55) + result;
                } else {
                    result = remainder + result;
                }
                num = share;
            }
            return result;
        }
    }

    '코딩 테스트 > TIP' 카테고리의 다른 글

    [코딩테스트] 2차원배열 회전하기  (1) 2021.05.24
    [JAVA] 날짜, 시간 계산 총 정리  (0) 2020.11.24
    [JAVA] 문자열이 영어로만 이루어져 있는지 판별하기(Pattern.mathces())  (0) 2020.11.10
    [JAVA] 아스키(ASCII) 코드 값 구하기  (0) 2020.11.10
    [JAVA] 최대 공약수(GCD), 최소 공배수(LCM) 구하기  (2) 2020.10.29
      '코딩 테스트/TIP' 카테고리의 다른 글
      • [코딩테스트] 2차원배열 회전하기
      • [JAVA] 날짜, 시간 계산 총 정리
      • [JAVA] 문자열이 영어로만 이루어져 있는지 판별하기(Pattern.mathces())
      • [JAVA] 아스키(ASCII) 코드 값 구하기
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그 github: https://github.com/kimchowon

      티스토리툴바