[백준] 11576번 - Base Conversion (Java)

Yong·2025년 1월 29일

백준

목록 보기
2/2

[백준] 11576번 문제


문제 풀이

  1. 먼저 진법과 진수의 개념을 정확히 알아야 했기에, 진법과 진수에 대해서 복습해보자.
    8진수로 나타난 1702를 -> 10진수로 변환 하려면

    맨 왼쪽부터 (1 X 8^3) + (7 X 8^2) + (0 X 8^1) + (2 X 8^0) = 963 이 되므로
    10진수 값은 963이 된다.

그리고 10진수 191 -> 8진수로 변환 하려면 몫이 0이 될 때까지 나눠주면 된다.
그렇다면 아래 사진과 같이 몫인 0과 나머지들이 남는데, 나머지 부분을 읽어주면 된다.
그래서 8진수로 변환한 값은 277이 된다.

  1. 위와 같은 개념을 바탕으로 주어진 A진법을 10진법으로 나타낸 후
    10진법으로 나타난 10진수를 B진법으로 변환하는 방법을 사용하였다.
    A진법을 10진법으로 변환 -> 10진법을 B진법으로 변환

또한, 10진법을 B진법으로 변환할 떄, 아래서부터 나머지 부분을 읽어주어야 하므로,
스택구조를 이용해서 POP하면서 읽어주도록 했다.


정답 코드

package com.example.week3_4;

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

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

        int[] arr = new int[T];
        st = new StringTokenizer(br.readLine());
        for(int i=T-1; i>-1; i--) arr[i] = Integer.parseInt(st.nextToken());
        

        //A진법을 10진법으로 변환
        double aToTen = 0;
        for(int i=T-1; i>-1; i--) aToTen += arr[i] * Math.pow(A,i);

        //10진법을 B진법으로 변환
        int tenToB = (int)aToTen;
        Stack<Integer> stack = new Stack<>();

        while(true){
            if(tenToB / B == 0) {
                stack.push(tenToB%B);
                break;
            }
            stack.push(tenToB%B);
            tenToB/=B;
        }

        while(!stack.isEmpty())System.out.print(stack.pop() + " ");
    }
}

(진법 변환 참고)
[https://jerryjerryjerry.tistory.com/170]
profile
Coram Deo

0개의 댓글