[백준] 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 11 | 104 ms | 14276 KB | 446 B |
2. 구현 [C++]
| 언어 | 시간 | 메모리 | 코드 길이 |
|---|---|---|---|
| C++ 17 | 0 ms | 2020 KB | 356 B |
This post is licensed under CC BY 4.0 by the author.