[백준] 2745번 - N진법 to 10진법 변환 (java)

팥빵·2025년 6월 2일

Baekjoon

목록 보기
23/49

B진법 수 N이 주어지고, 이를 10진법으로 변환하는 문제이다.

#방법1

Integer.parseInt(String N, int B;

이 메소드는 B진법 문자열 N를 10진법으로 바꿔주는 편리한 기능을 가지고 있다.

그래서 사실 이 메소드만 알고있으면 바로 답을 찾을 수 있다.

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

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

        System.out.println(Integer.parseInt(N, B));
        br.close();
    }
}



#방법2

입력받은 B진법 문자열 s를 직접 10진법으로 변환하는 방법이다.

2진법부터 9진법까진 그냥 숫자만 나오니까 그대로 변환하면 되는데,
11진법 부턴 알파벳으로 표현하는 방식이 추가되기 때문에 그 부분만 유의해주면 된다.

최종 출력인 result에다가는
B진법을 입력받았을 경우, 각 자릿수마다 B를 곱해주고, 해당 자릿수의 값을 10진수로 변환 후 더해주면 된다.

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

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        String N = st.nextToken();
        int B = Integer.parseInt(st.nextToken());
        
        int result = 0;
        
        for(int i=0; i<N.length(); i++){
            char c = N.charAt(i);
            int value;
            
            if(c >= 'A' && c <= 'Z'){
                value = c - 'A' + 10;
                // 'A'는 9다음 나오는 숫자 10을 의미하므로 변환 후 10을 더해준다.
            }else{
                value = c - '0';
                // 일반 숫자면 그저 숫자형태로 변환한다.
            }
            result = result * B + value;
        }
        System.out.println(result);
        br.close();
    }
}

맞았습니다!!

profile
반갑습니다

0개의 댓글