본문 바로가기

Algorithm

백준 2745 진법 변환 Java

아래 글에 있는 진법 변환2 의 반대 버전 문제이다.

진법 변환2 는 10진수 n을 b진수로 바꾸는 문제 였다면

진법 변환은 b진수 n을 10진수로 바꾸는 문제이다.

 

진법 변환2에서 

b진수로 변환 시킬때

if(a%b < 10) 

   (char)(n%b + '0') 

나머지가 10보다 작을 땐 아스키코드 의 '0'을 더해줘서 char값을 표현 했고

 

else

   (char)(n%b-10+'A')

나머지가 10이상 일땐 10을 빼주고 아스키코드 'A'을 더해줘서 A~Z의 값을 표현 했다.

 

그리고 반대로 출력해서 값을 만들었다.

만약 값이 2진수 1011 이라면 

이 값은 반대로 출력한 값이기 때문에

다시 10진수로 바꾸기 위해서는 뒤집지 않고 첫번째 자리부터

첫 번째 자리 값*2^0 + 두 번째 자리 값*2^1 + 세 번째 자리 값*2^2 + 네 번째 자리 값*2^3

으로 계산하면 10진수 값이 나오게 되는것이다.

 

그리고 계산을 하기 위해서는 b진법으로 바꿀 때 처럼 다시 아스키 코드값을 더해줬으므로

이번엔 빼줘야 한다.  또한 굳이 List<Character>을 사용할 필요 없이 String클래스의 charAt(int index)

메소드를 사용하였다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int ans = 0;
        String s = scan.next();
        int b = scan.nextInt();
        for(int i=0; i<s.length(); i++) {
            if('0' <= s.charAt(i) && '9'>=s.charAt(i))
                ans = ans*b+(s.charAt(i)-'0');
            else
                ans = ans*b+(s.charAt(i)-'A'+10);
        }
        System.out.println(ans);
    }