본문 바로가기

Algorithm

백준 11005 진법 변환 2 Java

진법 변환 문제이다.

이 문제는 2진법, 8진법, 16진법 뿐 만 아니라 1~36진법까지 변환해야 한다.

Integer.toBinaryString 같은 메소드는 못쓰는 문제인 것이다.

 

그러므로 나머지 연산을 통한 진법 변환을 해야한다.

Java카테고리의 진법변환 관련 글에 적어놓은 방법으로 나머지 연산을 통해 n진수를 구하면 된다.

근데 10이상 부터는 A~Z로 표현 되기 때문에 char형 ArratList를 만들어 아스키코드 값을 통해 값을 넣어주었다.

 

만약 9 이하라면

list.add(a%b+'0') 아스키코드값 0을 더해줌으로써 a%b의 값을 아스키코드로 char형 list에 저장한다.

 

10이상 이라면

list.add(a%b-10+'A') 10부터 A이므로 나머지 값에서 10을 빼고 아스키코드 값  'A'를 더해줌으로써 

A~Z까지 알파벳으로 저장되게 했다.

 

물론 char형 list이기 때문에 형변환은 필수다.

 

또한 올바르게 n진법으로 변환하기 위해서는 list저장한 값들을 뒤에서 부터 출력해야한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int b = scan.nextInt();
        List<Character> list = new ArrayList<>();
        while(n>0) {
            if(n%b<10)
                list.add((char)(n%b+'0'));
            else
                list.add((char)(n%b-10+'A'));
            n/=b;
        }
        for(int i=list.size()-1; i>=0; i--)
            System.out.print(list.get(i));
    }