[백준 11576번] Base Conversion with Java

guswls·2024년 5월 11일
0

알고리즘

목록 보기
28/39
post-custom-banner

문제


https://www.acmicpc.net/problem/11576



코드


package baekjoon;

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

class Main {
	public static void main(String[] args) throws Exception {
		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 N = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		int decimal = 0;
		for (int i = N; i > 0; i--) {
			int input = Integer.parseInt(st.nextToken());
			decimal += (input * Math.pow(A, i - 1));
		}

		List<Integer> list = new ArrayList<>();
		while (decimal != 0) {
			list.add(decimal % B);
			decimal /= B;
		}

		StringBuilder sb = new StringBuilder();
		for (int i = list.size() - 1; i >= 0; i--) {
			sb.append(list.get(i)).append(" ");
		}

		System.out.println(sb);
	}
}


문제 이해


  • 개인적으로 문제 설명이 빈약하다고 생각한다.

  • 입력과 출력이 아래와 같이 되어있는데 헷갈릴 여지가 존재한다. 세번쨰 입력으로 들어오는 수 216은 독립적인 숫자가 아닌 17진수의 첫번째 자리와 두번째 자리를 의미한다.
    출력 답 역시 17진수의 2 16을 8진수로 변환한 6 2를 의미한다.

    ```
    //입력
    17 8
    2
    2 16
    
    //출력
    6 2
    ```
  • 문제에서 "입력의 두 번째 줄에는 A진법으로 나타낸 숫자의 자리수의 개수 m(1 ≤ m ≤ 25)이 주어진다." 이 부분을 잘 캐치해야 216이 독립적인 숫자가 아니라는 것을 빠르게 캐치할 수 있을 것 같다.

  • 결론적으로는 A진수로 들어온 숫자에 대해서 B진수로 변환하여 출력하는 문제이다.



풀이 방법


  • A진수 -> 10진수 -> B진수 두번의 변화를 거쳐야 한다.
  • 먼저 A진수를 10진수로 변환하는 과정은 아래의 식을 이해하면 쉽다.

    2(17)^1 +16(17)^0 =34+16=50
    => decimal += (input * Math.pow(A, i - 1));

  • 이렇게 구해진 수를 B진수로 변환해주어야 한다. 위 10진수에서 B로 나눈 나머지를 구한 후 다시 B로 나누는 과정을 반복하면 된다.
  • 이때 높은 자리수부터 출력해야되기 때문에 역순으로 답을 출력한다.


핵심 포인트


  • 문제를 정확히 이해하고 진법 변환시 A -> 10 -> B 순서대로 진법 변환을 수행해야된다는 것을 알아야 한다.
  • decimal += input * A^(i-1) 이 수식을 기억하고 있어야 한다.


보완할 점 / 느낀 점


  • 문제를 정확히 이해하는 것이 힘들었다. 세번째 입력이 한가지 수에 대한 각 자리수를 입력한다는 것을 알았으면 삽질을 좀 덜했을 것 같다.
  • Integer.toString을 활용해서 10 -> B진법 변환을 하려고 했는데 답과 몇개의 테케가 맞았음에도 틀렸습니다.가 떴다. 이 이유는 아직도 잘 모르겠다.
  • 구현으로 분류되어있었지만, 구현보다는 약간 수학 문제같았다.


참고자료


profile
안녕하세요
post-custom-banner

0개의 댓글