2023. 4. 6. 18:06ㆍ알고리즘/백준
문제풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
interface Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]);
int B = Integer.parseInt(input[1]);
String result = "";
result = convertBinary(N, B);
System.out.println(result);
}
public static String convertBinary(int N, int B) {
int quotient = N / B;
int remainder = N % B;
String result = "", str;
str = convertChar(remainder, true);
if(quotient >= B) {
result = convertBinary(quotient, B);
} else {
result = convertChar(quotient, false);
}
return result+str;
}
public static String convertChar(int c, boolean isZero) {
String result = "";
if(c > 9) {
result = String.valueOf((char)('7'+c));
} else if(c > 0) {
result = String.valueOf(c);
} else if(isZero) {
result = "0";
}
return result;
}
}
10진수 N을 B 진수로 바꾸려면
N을 B로 계속 나누고 몫과 나머지 값을 알아야 합니다.
1. 60,466,175를 36으로 나누면 몫은 1,679,615가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 일의 자리가 됩니다.
2. 1,679,615를 36으로 나누면 몫은 46,655가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 십의 자리가 됩니다.
3. 46,655를 36으로 나누면 몫은 1,295가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 백의 자리가 됩니다.
4. 1,295를 36으로 나누면 몫은 35가 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 천의 자리가 됩니다.
5. 35를 36으로 나누면 몫은 0이 되고 나머지는 Z(35)가 됩니다. 이 값이 결과값의 만의 자리가 됩니다.
그래서 값은 ZZZZZ입니다.
이런 식으로 반복하도록 재귀 함수를 구현했습니다.
저는 몫이 B보다 작으면 반복 그만(위와 같은 사례는 4번까지 반복) 하고 마지막에 몫과 나머지를 더해서 출력하도록 했습니다.
char 데이터를 char로 캐스팅해주면 아스키코드에 해당하는 문자 값이 나옵니다.
10부터 35의 경우 (char)('7'+c)을 해주면 65부터 90이므로 A부터 Z가 됩니다.
9 이하 값은 그냥 String으로 변환합니다.
맨 앞자리가 0인데 더해주면 안됩니다.
출처 : https://www.acmicpc.net/problem/11005
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 19532번 수학은 비대면강의입니다 Java 문제 풀이 (0) | 2023.04.07 |
---|---|
[백준] 2720번 세탁소 사장 동혁 Java 문제 풀이 (0) | 2023.04.07 |
[백준] 2745번 진법 변환 Java 문제 풀이 (0) | 2023.04.06 |
[백준] 24313번 알고리즘 수업 - 점근적 표기 1 Java 문제 풀이 (0) | 2023.04.04 |
[백준] 24267번 알고리즘 수업 - 알고리즘의 수행 시간 6 Java 문제 풀이 (0) | 2023.03.23 |