[백준] 11005번 진법 변환 2 Java 문제 풀이

2023. 4. 6. 18:06알고리즘/백준

728x90
반응형

문제풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

interface Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        String[] input = br.readLine().split(" ");
         int N = Integer.parseInt(input[0]);
        int B = Integer.parseInt(input[1]);
        String result = "";
        result = convertBinary(N, B);
        System.out.println(result);
    }
    public static String convertBinary(int N, int B) {
        int quotient = N / B;
        int remainder = N % B;
        String result = "", str;
        str = convertChar(remainder, true);

        if(quotient >= B) {
            result = convertBinary(quotient, B);
        } else {
            result = convertChar(quotient, false);
        }
        return result+str;
    }

    public static String convertChar(int c, boolean isZero) {
        String result = "";
        if(c > 9) {
            result = String.valueOf((char)('7'+c));
        } else if(c > 0) {
            result = String.valueOf(c);
        } else if(isZero) {
            result = "0";
        }
        return result;
    }
}

10진수 N을 B 진수로 바꾸려면 

N을 B로 계속 나누고 몫과 나머지 값을 알아야 합니다.

 

1. 60,466,175를 36으로 나누면 몫은 1,679,615가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 일의 자리가 됩니다.

2.   1,679,615를 36으로 나누면 몫은      46,655가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 십의 자리가 됩니다.

3.        46,655를 36으로 나누면 몫은        1,295가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 백의 자리가 됩니다.

4.          1,295를 36으로 나누면 몫은             35가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 천의 자리가 됩니다.

5.               35를 36으로 나누면 몫은               0이 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 만의 자리가 됩니다.

 

그래서 값은 ZZZZZ입니다.

이런 식으로 반복하도록 재귀 함수를 구현했습니다.

 

저는 몫이 B보다 작으면 반복 그만(위와 같은 사례는 4번까지 반복) 하고 마지막에 몫과 나머지를 더해서 출력하도록 했습니다.

 

char 데이터를 char로 캐스팅해주면 아스키코드에 해당하는 문자 값이 나옵니다.

10부터 35의 경우 (char)('7'+c)을 해주면 65부터 90이므로 A부터 Z가 됩니다.

9 이하 값은 그냥 String으로 변환합니다.

 

맨 앞자리가 0인데 더해주면 안됩니다.

 

 

출처 : https://www.acmicpc.net/problem/11005

 

11005번: 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를

www.acmicpc.net

 

728x90
반응형