알고리즘/백준

[백준] 11005 진법 변환2 자바

보름달빵 2024. 10. 3. 16:35

 

 

✅문제


 

10진법으로 첫번째값으로 주어진다. 이 수를 두번째 값으로 주어진 진법으로 변환하여 출력하는 문제이다

 

 

 

 

✅풀이


 

🧁풀이과정 

 

 

예를 들어 25를 2진법으로 변환해보자. 

 

25 / 2  ===> 몫: 12 , 나머지:1 

12/2   ===>  몫:6 ,    나머지:0

6/2     ===>  몫:3 ,   나머지: 0

3/2    ===>  몫:1,    나머지: 1

1/2    ===>  몫:0,    나머지:1 

 

몫이 0이 되었을때 나머지 값들을 역순으로 읽는다 11001 

 

 

10 진법의 수를 몫이 0이 되기 전까지 계속 n 의 값으로 나누면서 나머지를 저장한다. 

그리고 몫이 0이 되었을때 역순으로 값을 읽는다. 

 

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

public class Main {
    public static void main(String[] args) throws IOException {


        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        int num = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());

        while(num>0){

            int k=num%n; // 나머지
            num=num/n;  // 몫

            if(k>=10){ // 나머지 10이상인 경우 문자로 치환
                sb.append((char)(k+55));
            }
            else {
                sb.append(k);
            }
        }

        // 역순으로 출력
        bw.write(sb.reverse().toString());

        bw.flush();
        bw.close();
        br.close();
    }
}

 

 

 

처음에 몫=0 이 되었을때 값을 역순으로 읽기 때문에 스택에서 값을 빼내는 방식으로 생각했었다. 하지만 스택에 넣은 값을 빼내는 것도 좋지만 문자열에 넣고 값을 거꾸로 꺼내는 방식도 괜찮은 것 같다. 

 

 

✅정리 


 

StringBuilder 에서 reverse 메서드를 사용하면 값을 거꾸로 꺼낼 수 있다.  이후 toString 메서드를 이용하여 문자열로 바꿔서 출력하면 된다. 

 

 

 

 

 

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1707 이분 그래프 자바  (0) 2024.11.22
[백준] 1929 소수 구하기 자바  (1) 2024.11.19
[백준] 11047 동전0 자바  (0) 2024.11.18
[백준] 1167번 트리의 지름  (0) 2024.10.30