본문 바로가기
Baekjoon 자바 코드/일반 수학

[백준] 11005번 진법 변환2 풀이 코드 (Java 자바)

by 망댕이 2024. 12. 11.
반응형

해당 주어진 숫자를 해당 B진법으로 바꾸어 출력하는 문제이다.

N을 B진법으로 바꾸는 방법에 대해 아래 그림을 통해 간단하게 살펴보자.

 

아래 예시는 46을 2진법으로 바꾸어 101110 값이 도출되는 과정을 적어놓았다.

이것을 코드로 어떻게 변환하여 짜야할지 고민을 해보자.

접근 방법)

N을 B진법으로 나누는 과정은 정말 간단하다.N을 B로 나누고 그 몫을 B로 계속해서 몫이 0일 될 때까지 나누는데, 그 과정에서 나오는 몫과 나머지 중 나머지가 이 문제 출력값에 해당되는 값이다.

 

while문을 이용하여 몫이 0보다 클 때까지 B로 계속 나누는 작업을 해주어야한다.그러면 나머지를 0, 1, 1, 1, 0, 1 순으로 얻을 수 있게 되는데 우리가 필요한 값은 1, 0, 1, 1, 1, 0이다.(추가로 나머지가 10 이상일때와 10 미만일 때 구분해주어야 한다. 그 이유는 코드에서 살펴보자.)그래서 나머지를 얻을 때마다 String안에 추가하고 마지막에 String을 역순으로 출력하면 우리가 원하는 값을 얻을 수 있게 된다.

정답 코드 1)

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int B = sc.nextInt(); //진법
        int num = N;// 숫자
        String result = "";
        while(num > 0){
            int muk = num/B; // 몫
            int namergi = num%B; // 나머지

            if(namergi>=10){ // 나머지가 10 이상일 경우 알파벳으로 변환해야함.
                char ch = (char)(namergi+55);
                result += ch;
            }else{ // 나머지가 9이하일 경우는 그대로 출력함.
                result += namergi;
            }
            num = muk;
        }
        for (int i = result.length() - 1; i >= 0; i--) { // String형 result값을 역순으로 출력.
            System.out.print(result.charAt(i));
        }
    }
}

 

반응형