백준 11005 진법 변환2[JAVA]

Ga0·2023년 3월 30일
1

baekjoon

목록 보기
13/124

  • 이 문제는 바로 전 포스트에 올렸던 2745번 문제의 반대 버전으로 보면 된다.

문제 해석

  • 전 포스트와 반대로 10진수의 값과 바꿀 진법(B)를 입력받고 B진법의 값으로 바꾸면 된다.
  • 예시로 10진수를 16진수로 바꾸는 방법이다.
  • 이런식으로 코드를 작성하면 된다는 의미!

코드

import java.io.*;
import java.util.ArrayList;
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()); //10진수 숫자
        int B = Integer.parseInt(st.nextToken()); //몇진법?

        br.close();

        ArrayList<Character> list = new ArrayList<>();

        while (N > 0) { //몫이 0보다 클 경우(더이상 B진법으로 바꿀 수가 없을 경우)
            if (N % B < 10) { //만약 나누었을때 나머지가 10보다 작을 경우
                list.add((char) (N % B + '0')); //그냥 숫자출력
            }
            else{ //10보다 크거나 같을 경우
                /*예를 들어 16진수는 10부터 A이다. 즉 -10을 한담에 그 남은 횟수만큼 헤서 +'A'하면 구해야하는 B진법의 
                 숫자가 나옴*/
                list.add((char) (N % B - 10 + 'A')); 
            }
            N /= B; //B으로 나눔 => B진법의 한자리를 구했기 때문(여기서 한자리는 첫번째 자리가 아니라, 그냥 한칸을 의미)
        }

        for (int i = list.size() - 1; i >= 0; i--) { // 맨처음부터 출력해야하므로
            System.out.print(list.get(i));
        }
    }
}

결과

느낀점

  • 아직 몇진수로 바꿔야한다는 문제를 많이 풀어보지 않아서 문제 풀때 어색한 감이 있지만, 이 문제를 계기로 다시 리마인드하는 기회가 되었다...

0개의 댓글