AlgorithmπŸ₯‡

11576.Base Conversion

hae02y 2023. 10. 23. 23:15
λ°˜μ‘ν˜•

문제

νƒ€μž„λ¨Έμ‹ μ„ κ°œλ°œν•˜λŠ” μ •μ΄λŠ” 였랜 λ…Έλ ₯ 끝에 νƒ€μž„λ¨Έμ‹ μ„ κ°œλ°œν•˜λŠ”λ° μ„±κ³΅ν•˜μ˜€λ‹€. λ―Έλž˜κ°€ κΆκΈˆν•œ μ •μ΄λŠ” μžμ‹ μ΄ κ°œλ°œν•œ νƒ€μž„λ¨Έμ‹ μ„ μ΄μš©ν•˜μ—¬ 500λ…„ ν›„μ˜ μ„Έκ³„λ‘œ 여행을 λ– λ‚˜κ²Œ λ˜μ—ˆλ‹€. 500λ…„ ν›„μ˜ μ„Έκ³„μ—μ„œλ„ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜κ³  μ‹Άμ—ˆλ˜ μ •μ΄λŠ” λ°±μ€€ μ‚¬μ΄νŠΈμ— μ ‘μ†ν•˜μ—¬ 문제λ₯Ό ν’€κΈ°λ‘œ ν•˜μ˜€λ‹€. κ·ΈλŸ¬λ‚˜ λ―Έλž˜μ„Έκ³„λŠ” A진법을 μ‚¬μš©ν•˜κ³  μžˆμ—ˆκ³ , B진법을 μ‚¬μš©ν•˜λ˜ μ •μ΄λŠ” 문제λ₯Ό ν’€ μˆ˜κ°€ μ—†μ—ˆλ‹€. λ›°μ–΄λ‚œ ν”„λ‘œκ·Έλž˜λ¨Έμ˜€λ˜ μ •μ΄λŠ” Aμ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ 숫자λ₯Ό Bμ§„λ²•μœΌλ‘œ λ³€ν™˜μ‹œμΌœμ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κΈ°λ‘œ ν•˜μ˜€λ‹€.

Nμ§„λ²•μ΄λž€, ν•œ μžλ¦¬μ—μ„œ 숫자λ₯Ό ν‘œν˜„ν•  λ•Œ μ“Έ 수 μžˆλŠ” 숫자의 κ°€μ§“μˆ˜κ°€ Nμ΄λΌλŠ” λœ»μ΄λ‹€. 예λ₯Ό λ“€μ–΄ N이 17일 λ•Œ ν•œ μžλ¦Ώμˆ˜μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μˆ˜λŠ” 0, 1, 2, ... , 16으둜 총 17가지가 λœλ‹€.

## μž…λ ₯

μž…λ ₯의 첫 μ€„μ—λŠ” λ―Έλž˜μ„Έκ³„μ—μ„œ μ‚¬μš©ν•˜λŠ” 진법 A와 정이가 μ‚¬μš©ν•˜λŠ” 진법 Bκ°€ 곡백을 κ΅¬λΆ„μœΌλ‘œ 주어진닀. A와 BλŠ” λͺ¨λ‘ 2이상 30μ΄ν•˜μ˜ μžμ—°μˆ˜λ‹€.

μž…λ ₯의 두 번째 μ€„μ—λŠ” Aμ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ 숫자의 자리수의 개수 m(1 ≀ m ≀ 25)이 주어진닀. μ„Έ 번째 μ€„μ—λŠ” A진법을 이루고 μžˆλŠ” 숫자 mκ°œκ°€ 곡백을 κ΅¬λΆ„μœΌλ‘œ 높은 μžλ¦Ώμˆ˜λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 주어진닀. 각 μˆ«μžλŠ” 0이상 Aλ―Έλ§Œμž„μ΄ 보μž₯λœλ‹€. λ˜ν•œ μˆ˜κ°€ 0으둜 μ‹œμž‘ν•˜λŠ” κ²½μš°λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

Aμ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ 수λ₯Ό 10μ§„λ²•μœΌλ‘œ λ³€ν™˜ν•˜μ˜€μ„ λ•Œμ˜ 값은 μ–‘μ˜ μ •μˆ˜μ΄λ©° 220보닀 μž‘λ‹€.

## 좜λ ₯

μž…λ ₯으둜 주어진 Aμ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ 수λ₯Ό Bμ§„λ²•μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ 좜λ ₯ν•œλ‹€.

μ‹œκ°„ μ œν•œ λ©”λͺ¨λ¦¬ μ œν•œ 제좜 μ •λ‹΅ 맞힌 μ‚¬λžŒ μ •λ‹΅ λΉ„μœ¨
2 초 256 MB 10184 5656 4825 56.177%

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

풀이

1λ²ˆμ§Έμ€„ A B (A진법을 Bμ§„λ²•μœΌλ‘œ 바꿔라!)
2λ²ˆμ§Έμ€„ M(M 개의 μž…λ ₯이 λ“€μ–΄μ˜¬ μ˜ˆμ •)
3λ²ˆμ§Έμ€„ X Y .... (Aμ§„λ²•μœΌλ‘œ 각자리수λ₯Ό λ‚˜νƒ€λƒ„)

문제λ₯Ό μ„€λͺ…ν•˜μžλ©΄ μ΄λ ‡κ²Œ λœλ‹€. λ‚˜μ˜ 경우 3λ²ˆμ§Έμ€„μ„ ν•΄μ„ν•˜μ§ˆ λͺ»ν•΄μ„œ 진땀을 뺏닀... λ¬Έν•΄λ ₯을 κΈΈλŸ¬μ•Όν• λ“―... 문제 ν’€μ΄μˆœμ„œλ₯Ό 보자면 λ‹€μŒκ³Ό κ°™λ‹€.

  1. A진법 -> 10진법
  2. 10진법 -> B진법

1λ²ˆμ„ μˆ˜ν–‰ν• λ•ŒλŠ” A의 자리수 제곱과 자리수λ₯Ό κ³±ν•˜λŠ” λ°©μ‹μœΌλ‘œ 문제λ₯Ό ν’€λ©΄λ˜κ³ ,
2λ²ˆμ„ μˆ˜ν–‰ν• λ•ŒλŠ” 10μ§„λ²•μˆ˜λ₯Ό Bμ§„λ²•μœΌλ‘œ λ‚˜λˆ κ°€λ©° λ‚˜μ˜¨ λ‚˜λ¨Έμ§€λ₯Ό μ—­μˆœμœΌλ‘œ ν‘œμΆœν•˜λ©΄λœλ‹€.

μ½”λ“œ

import java.io.IOException;  
import java.util.Scanner;  
import java.util.Stack;  

public class BaseConversion {  
    public static void main(String[] args) throws IOException {  
        Scanner sc = new Scanner(System.in);  

        int A = sc.nextInt();  
        int B = sc.nextInt();  
        int m = sc.nextInt();  

        int[] arr = new int[m];  

        for (int i = 0; i < m; i++) {  
            arr[i] = sc.nextInt();  
        }  
        int ten = 0;  

        for (int i = 0; i < m; i++) {  
            ten += arr[i] * Math.pow(A, m-i-1);  
            // 237(8) 8μ§„μˆ˜ 237을 10μ§„μˆ˜λ‘œ λ°”κΎΈλ©΄...?  
            //    2 x pow(8,2) i = 0            
            //    3 x pow(8,1) i = 1            
            //    7 x pow(8,0) i = 2            
            //    즉 pow(8,3-i-1)        
            }  

        Stack<Integer> stack = new Stack<>();  

        while (ten != 0) {  
            stack.push(ten % B);  
            ten /= B;  
        }  

        while (!stack.isEmpty()) {  
            System.out.print(stack.pop() + " ");  
        }  
        sc.close();  
    }  
}
λ°˜μ‘ν˜•