Chat 상우

[백준 11005 자바] 알고리즘 진법 변환 2 본문

algorithm

[백준 11005 자바] 알고리즘 진법 변환 2

chat-rilla 2024. 9. 19. 14:57

백준 11005번 자바 진법 변환2

안녕하세요 chat 상우 입니다.

백준 11005 자바 알고리즘 진법 변환 2번 문제 정답 및 해설을 풀어보려고 합니다.
백준 11005번 문제는 일반 수학에 해당하며 아래는 정답 코드입니다. 


 백준 11005번 진법 변환 2 - 자바 코드

백준 11005번 진법 변환2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        int N = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());

        StringBuilder sb = new StringBuilder();

        while (N != 0){
            if((N % B) >= 10){
                sb.append((char) ((N%B) + 55));
            }else{
                sb.append((N%B));
            }
            N /= B;
        }
        System.out.println(sb.reverse());
    }
}

해설

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int N = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());

위 코드는 사용자의 입력 값을 처리하기 위해서 작성한 내용이다.
N은 사용자가 입력한 수부분을 처리하기 위함이며 B는 사용자가 입력한 진법을 처리하기 위한 부분이다.

StringBuilder sb = new StringBuilder();

 

처리 결과를 담기위한 것으로 StringBuilder는 문자열을 효율적으로 조작할 수 있다는 특징을 가지고 있다.

while (N != 0){
    if((N % B) >= 10){
        sb.append((char) ((N%B) + 55));
    }else{
        sb.append((N%B));
    }
    N /= B;
}

진법 변환을 위한 로직으로 N이 0이 아닐때 까지 반복한다. N%B는 N을 B로 나눈 나머지를 구하여 이 값은 현재 자리의 숫자를 나타내게되는데 만약 나눈 값이 10보다 크다면 이 값은 진법으로 변환해야 하기 때문에 55를 더하게 된다.

아스키 코드


55를 더하는 이유는 10 = A = 65의 값을 갖게되기 때문에 10 미만의 수는 일반 수로 표현하고 10 이상의 수는 아스키 코드를 참고하여 문자로 변환하게 되는데 이때 10은 A가 되며 A는 65와 같기 때문에 55를 기준으로 10 이상의 수를 더하면 현자 자리의 값을 알 수 있게 된다.

System.out.println(sb.reverse());

string 버퍼에 있는 값을 역순으로 출력한다. 이는 문자를 처리하면서 나온 결과가 역순으로 출력되어야 하기 때문이다.