공부하기/백준

[Java] 백준 풀기 11005 - 진법 변환 2

XEV 2023. 8. 8. 23:32

자바 백준 11005번

브론즈 1

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

 

11005번: 진법 변환 2

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 구현

 

 

 

 

 

문제 풀기

주어진 10진수를 목표 진법으로 나누어 그에 따른 나머지가 10 미만인지 또는 10 이상인지 판별한다.

10 미만일 경우 숫자로 변환하고, 10 이상일 경우 알파벳으로 변환하여 저장한다.

숫자 또는 알파벳 변환은 `char`를 이용한 계산 특성을 이용한다.

 

 

 

 

 

코드 보기

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();  // 10진법 수 N을 입력받음
        int B = sc.nextInt();  // 목표 진법 B를 입력받음
        
        // 10진법 수 N을 B진법으로 변환하여 결과를 얻음
        String result = convertToBaseN(N, B);
        
        // 변환된 결과를 출력
        System.out.println(result);
    }

    // 10진법 수를 B진법으로 변환하는 함수
    public static String convertToBaseN(int num, int base) {
        StringBuilder sb = new StringBuilder();  // 변환된 결과를 저장하기 위한 StringBuilder 객체 생성
        
        // 주어진 10진법 수가 0보다 큰 동안 반복
        while (num > 0) {
            int remainder = num % base;  // 현재 자릿수의 값을 목표 진법으로 나눈 나머지를 계산
            char digit;  // 변환된 자릿수를 저장할 변수
            
            if (remainder < 10) {
                // 나머지가 10보다 작은 경우 (0부터 9까지)
                digit = (char) ('0' + remainder);  // 숫자로 변환
            } else {
                // 나머지가 10 이상인 경우 (예: 10부터 35까지)
                digit = (char) ('A' + remainder - 10);  // 알파벳 대문자로 변환
            }
            
            sb.insert(0, digit);  // 변환된 자릿수를 StringBuilder의 앞에 삽입하여 순서를 뒤집음
            num /= base;  // 현재 자릿수 처리 후 다음 자릿수로 넘어감
        }
        
        // 변환된 결과를 문자열로 반환
        return sb.toString();
    }
    
}