자바/코드트리

[코드트리] 진법 변환 5 - 자바(Java)

Jakorithm 2024. 3. 2. 00:28
728x90

문제

https://www.codetree.ai/training-field/search/problems/base-conversion-5?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

10진수 숫자 한 개와 진법이 주어집니다. 입력받은 진법으로 변환하는 프로그램을 작성해 보세요.

 

입력 예시

93 2

 

출력 예시

1011101

 

 

코드

첫 번째 줄에 10진수 숫자와 변환할 진법이 공백으로 구분되어 주어진다.

  • 1 <= 숫자 <= 21억
  • 진법은 2, 8, 16 중 하나
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int decimal = Integer.parseInt(st.nextToken()); // 10진수
        int base = Integer.parseInt(st.nextToken()); // 진법

        // 10진수를 주어진 진법의 수로 변환
        String result = convertDecimalToBase(decimal, base);

        bw.write(result);
        bw.flush();
        bw.close();
    }

    private static String convertDecimalToBase(int decimal, int base) {
        StringBuilder sb = new StringBuilder();

        while (decimal > 0) {
            // 10진수를 대상 진법으로 나눈 나머지
            int temp = decimal % base;

            if (temp >= 10) { // 10보다 큰 경우 문자로 매핑
                sb.append((char) (temp - 10 + 'a'));
            } else { // 10 미만이면 숫자 그대로
                sb.append(temp);
            }

            // 10진수를 대상 진법으로 나누기
            decimal = decimal / base;
        }

        return sb.reverse().toString();
    }
}
728x90