Post

[백준] 11005번 - 진법 변환 2 [Java][C++]

[백준] 11005번 - 진법 변환 2 [Java][C++]

문제 링크


1. 문제 풀이

$10$ 진수 $N$ 을 $B$ 진법 수로 바꾸는 문제로 직접 구현해도 되고 내장 함수가 있으면 활용해도 된다.


2. 코드

1. 구현 [Java]

Java의 경우 Integer.toString 메서드에 오버로딩된 메서드 중 진법 변환을 한 문자열을 반환하는 메서드가 있다. $10$ 진수를 넘어가면 알파벳 소문자로 표현하기에 toUpperCase 메서드를 통해 대문자로 변환했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.io.*;
import java.util.*;

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());

        System.out.println(Integer.toString(N, B).toUpperCase());
    }
}

2. 구현 [C++]

C++의 경우 진법 변환 함수가 없어서 직접 구현했다. digits 문자열을 활용하는데 주어진 $N$ 을 $B$ 로 나눈 나머지가 변환했을 때 끝자리가 되며 이 값을 digits 에서 얻어올 수 있도록 구현했다. 계산 후 나머지는 버린 몫에 대해 다시 다음 과정을 진행하면 끝에서 두 번째 자리를 구할 수 있고, 이 과정을 반복하면 역순으로 $B$ 진법으로 변환한 수를 얻을 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, b;
    cin >> n >> b;

    string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string ans;

    while (n > 0) {
        ans += digits[n % b];
        n /= b;
    }
    reverse(ans.begin(), ans.end());

    cout << ans;
}

3. 풀이 정보

1. 구현 [Java]

언어시간메모리코드 길이
Java 11104 ms14276 KB446 B

2. 구현 [C++]

언어시간메모리코드 길이
C++ 170 ms2020 KB356 B

This post is licensed under CC BY 4.0 by the author.