※ 문제
문제 이해하기.
B진법이 무엇인지 알아보자.
두 수 A와 B가 주어졌을 때 A를 B로 나눈 나머지값들을 B진법 규칙의 맞게 변환시킨 것이다.숫자 60,466,175와 36로 예를 들면, 60,466,175%36 = 35이다.그리고 60,466,175/36 = 1,679,615(소수점제외)이고, 다시 1,679,615을 36으로 나눈 나머지 값을 구하면 35가 나온다.
반복하면 마지막 숫자는 35가 나와 총 나머지값은 35,35,35,35,35이고, 이를 B진법으로 변환하면 ZZZZZ이 되는 것이다.
백준문제(https://www.acmicpc.net/problem/11005)이 문제의 반대로 푸는 문제인 것이다.
1. 성공
1) 설계
10진법 → B진법으로 이 아닌 B진법 → 10진법 이기 때문에 거꾸로 연산해야한다.
예제 입력으로 예시 들면
// 예제 입력
ZZZZZ 36
연산 과정은 다음과 같다.
① 35 (* Z = 35)
② 36*35 = 1260
1260+35 = 1295
③ 36*1295 = 46620
46620+35 = 46655
④ 36*46655 = 1679580
1679580+35 = 1679615
⑤ 36*1679615 = 60466140
60466140+35 = 60466175
답은 60466175이 된다.
이것을 코드로 구현해보자.
2) 코드
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
String[] arr = st.nextToken().split("");
int N = Integer.parseInt(st.nextToken());
long result = 0;
if(!arr[0].matches("[A-Z]")) {
result = Long.parseLong(arr[0]);
}
if(arr[0].matches("[A-Z]")) {
byte[] bytes = arr[0].getBytes(StandardCharsets.US_ASCII);
result = bytes[0]-55;
}
for(int i=1; i<arr.length; i++) {
result *= N;
if(!arr[i].matches("[A-Z]")) {
result += Long.parseLong(arr[i]);
}
if(arr[i].matches("[A-Z]")) {
byte[] bytes = arr[i].getBytes(StandardCharsets.US_ASCII);
result += bytes[0] - 55;
}
}
bw.write(result+"");
bw.flush();
bw.close();
}
}
문제의 예제는 모두 통과하였으나 정확도의 이슈가 해결되지 않은 분은 아래 반례로 확인해보기 바랍니다.
※ 반례
입력 : 10201 3
출력 : 100
연산과정 :
① 1
② 3*1 = 3
3+0 = 3
③ 3*3 = 9
9+2 = 11
④ 3*11 = 33
33+0 = 33
⑤ 3*33 = 99
99+1 = 100
'자기계발 > 백준 문제 풀이' 카테고리의 다른 글
1373 자바 ] 2진수 8진수 (0) | 2022.10.11 |
---|---|
2609 자바 ] 최대공약수와 최소공배수(풀이) / 유클리드 호제법 (0) | 2022.09.16 |
1918 자바 ] 후위 표기식(풀이) (0) | 2022.09.13 |
17299 자바 ] 오등큰수(풀이) (0) | 2022.09.10 |
17298 자바 ] 오큰수(풀이) (0) | 2022.09.09 |