[백준] 11005

ninano05·2026년 3월 27일

진법 변환
B로 나눈 나머지가 일의자리 숫자이다.
즉 B진법에서 각 자리 숫자는 N을 계속해서 B로 나눈 나머지이다.

다음과 같이 StringBuilder을 사용해서 문자열을 조립했다.

  • StringBuilder.append() 메서드는 문자열의 뒤로 삽입한다.
  • StringBuilder.insert(n, "s")는 메서드의 n 위치에 삽입한다.
  • 맨앞으로 요소들을 넣고 싶은 경우에는 insert를 사용하기보다는 append()로 다 채워 넣고, 마지막에 .reverse()옵션을 주는 것이 낫다.
  • insert()는 넣을 때마다 한칸 씩 뒤로 미는 계산이 진행되기 때문에, 효율적인 측면에서 좋지 않다.

insert() 사용한 경우

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

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringBuilder answer = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());

        // B로 나눈 나머지가 각 자리 숫자
        // 일의자리 수 부터 구하게 됨
        // stringBuilder 사용시 append()는 뒤로, insert()는 위치를 지정해서 넣어준다.
        while(!(N == 0)) {
            int num = N%B;
            if(num>=0 && num<=9) { // 숫자인 경우
                answer.insert(0, num);
            } else { // 문자인 경우
                answer.insert(0, (char)(num-10+'A'));
            }
            N = N / B; // 다음 자리 수 계산을 위해 현재 계산한 자리 버림
        }
        bw.write(answer.toString());
        bw.flush();
        bw.close();
        br.close();
    }
}

.reverse() 사용한 경우

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

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringBuilder answer = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());

        // B로 나눈 나머지가 각 자리 숫자
        // 일의자리 수 부터 구하게 됨
        // stringBuilder 사용시 append()는 뒤로, insert()는 위치를 지정해서 넣어준다.
        while(!(N == 0)) {
            int num = N%B;
            if(num>=0 && num<=9) { // 숫자인 경우
                answer.append(num);
            } else { // 문자인 경우
                answer.append((char)(num-10+'A'));
            }
            N = N / B; // 다음 자리 수 계산을 위해 현재 계산한 자리 버림
        }
        bw.write(answer.reverse().toString());
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
초보 개발자

0개의 댓글