본문 바로가기
알고리즘/백준

백준 11005번 - 진법 변환 2(Java 8)

by latissimus 2022. 3. 18.

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

 

11005번: 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를

www.acmicpc.net

코드 :

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        StringBuilder sb = new StringBuilder();
        char[] arr = new char[36];
        if(N == 0){
            sb.append(0);
        }
        for (int i= 0; i< 10; i++){
            arr[i] = (Character.forDigit(i,10));
        }
        for (int i = 10; i <= 35; i++) {
            arr[i] = (char)('A'+(i-10)); //index 10 = 'A', 11 = 'B'... 35 = 'Z'
        }

        while(N != 0){
            sb.append(arr[N % B]);
            N/=B;
        }
        System.out.println(sb.reverse());
    }
}

 

수정, 속도는 조금 느려짐

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        StringBuilder sb = new StringBuilder();
        char[] arr = new char[36];
        if(N == 0){
            sb.append(0);
        }

        while(N != 0){
            if(N % B < 10){
                sb.append(N%B);
            }
            if(N % B >= 10){
                sb.append((char)('A' + (N % B) - 10));
            }
            N/=B;
        }
        System.out.println(sb.reverse());
    }
}

참고:

https://velog.io/@kimmjieun/%EB%B0%B1%EC%A4%80-11005%EB%B2%88-%EC%A7%84%EB%B2%95-%EB%B3%80%ED%99%98-2-Java-%EC%9E%90%EB%B0%94

 

[백준] 11005번 진법 변환 2 - Java, 자바

브론즈 1 https://www.acmicpc.net/problem/11005n%b가 9이하라면 list.add(n%b+'0') 아스키코드값 0을 더해줌으로써 a%b의 값을 아스키코드로 char형리스트에 저장한다. n%b가 10이상이라면 list.add(n%b

velog.io

 

char 과 int 변환 시 '0'을 더하거나 빼는 점, StringBuilder에 reverse()가 있다는 점을 알게 되었다.

댓글