[BaekJoon] 11005번 - 진법 변환 2 [Java][C++]
[BaekJoon] 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;
}
This post is licensed under CC BY 4.0 by the author.