본문 바로가기
알고리즘/기초수학

[java 백준] 실버 5/11576번 Base Conversion

by Meaning_ 2021. 9. 13.
728x90
반응형

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

 

11576번: Base Conversion

타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의

www.acmicpc.net

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.io.IOException;
import java.util.Scanner;
import java.util.Stack;
 
public class Main {
 
    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 + 1];
        for (int i = 1; i <= m; i++) {
            arr[i] = sc.nextInt();
        }
        int ten = 0;
        for (int i = 1; i <= m; i++) {
            ten += arr[i] * Math.pow(A, m - i);
 
        }
 
        Stack<Integer> stack = new Stack<>();
 
        while (ten != 0) {
            stack.push(ten % B);
 
            ten /= B;
 
        }
 
        while (!stack.isEmpty()) {
            if (stack.size() == 1) {
                System.out.println(stack.peek());
            } else {
                System.out.print(stack.peek() + " ");
            }
 
            stack.pop();
 
        }
 
    }
 
}
cs

 

 

코드 해설 


 

문제 이해가 잘 안됐는데

 

예를 들어 

17진법을 8진법으로 바꿔야 하며 , 2자리의 수가 주어지는데 각 자리수가 2 16이라고 해보자. 

우선 17진법을 8진법으로 바꾸려면 17진법 ->10진법 ->8진법으로 바꿔야한다.

2 16이 처음에는 뭔가 했는데 알고보니 각각의 숫자가 아니라 하나의 숫자였다. 2가 1의 자리

16이 0의 자리 였다.

 

그래서 17진법을 10진법으로 바꾸면

2*(17)^1 +16*(17)^0 =34+16=50

 

10진법을 8진법으로 바꾸면

 

50=(8*6)+2

6=(8*0)+6

 

이렇게 되면 2 6 이 출력되는데(선입선출)

문제에서 원하는건 6 2 가 출력되어야 한다 (선입후출)

여기서 떠올릴 수 있는게 스택이다!

 

 

내가 틀렸던 부분


 

총 3번의 틀렸습니다 가 나왔는데 이유는

 

while (ten != 0)

 

여기였다! 

 

계속 while(ten%B!=0) 으로 조건을 돌려서 틀렸다. 

728x90
반응형

댓글