반응형
[문제 풀이][Java] 백준 2745번 진법 변환
* 학습 목적의 게시물이나 혹시 이 게시물이 문제가 된다면 언제든 연락 부탁드립니다.
* 더 나은 풀이를 위한 훈수, 조언 등 모두 환영합니다!
문 제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다.
이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입 력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출 력
문제 해석
- B진법 수는 String으로 받고, 변환된 진법 수는 10억 이하임으로 int로 받는다.
- 진수 변환법을 적용한다.
해결 방법
- N진법은 M자리수를 10진법으로 변환하는 방법은 아래와 같다.
- 각 자리의 수는 1부터 최대 35까지이며 두 자리수인 10부터는 A로 시작하여 35는 Z로 표현한다. ex) 36진수 ZAV5
- 1의 자리를 0으로 시작하여 N에 M-1 ~ 0 제곱한 수에 각 자리수를 곱한 수를 더한 값이 10진수이다.
- 예시) 36진수 ZAV5
- (36^3 * 35) + (36^2 * 10) + (36^1 * 31) + (36^0 * 5) = 1647041
- 주어진 B진법 수를 String으로 받아 char Array로 변환한다.
- 반복문으로 배열의 요소를 확인해가며 1~Z에 맡는 숫자로 변환한다.
- 위 변환법을 적용한다.
참고사항
- 추가 공부 필요내용 : Map, String to char Array, 진수 변환법
전체 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
static int convertToDecimal (String givenNum, int arithmetic) {
HashMap<String, Integer> table = new HashMap<>();
table.put("0", 0);table.put("1", 1);table.put("2", 2);table.put("3", 3);
table.put("4", 4);table.put("5", 5);table.put("6", 6);table.put("7", 7);
table.put("8", 8);table.put("9", 9);table.put("A", 10);table.put("B", 11);
table.put("C", 12);table.put("D", 13);table.put("E", 14);table.put("F", 15);
table.put("G", 16);table.put("H", 17);table.put("I", 18);table.put("J", 19);
table.put("K", 20);table.put("L", 21);table.put("M", 22);table.put("N", 23);
table.put("O", 24);table.put("P", 25);table.put("Q", 26);table.put("R", 27);
table.put("S", 28);table.put("T", 29);table.put("U", 30);table.put("V", 31);
table.put("W", 32);table.put("X", 33);table.put("Y", 34);table.put("Z", 35);
int decimalNum = 0;
String[] numChar = givenNum.split("");
for (int i = 0; i < numChar.length; i++) {
int powerOfN = numChar.length - 1 - i;
decimalNum += (Math.pow(arithmetic, powerOfN)) * table.get(numChar[i]);;
}
return decimalNum;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String givenNum = st.nextToken();
int arithmetic = Integer.parseInt(st.nextToken());
int answer = convertToDecimal(givenNum, arithmetic);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(String.valueOf(answer));
bw.flush();
br.close();
bw.close();
}
}
반응형
'Programming Problem > 백준(BOJ)' 카테고리의 다른 글
[문제 풀이][Java] 백준 1037번 약수 (3) | 2023.06.13 |
---|---|
[문제 풀이][Java] 백준 1002번 터렛(두 원의 위치관계) (1) | 2023.06.10 |
[문제 풀이][Java] 백준 16953번 A→B (2) | 2023.06.08 |
[문제 풀이][Java] 백준 1026번 보물 (1) | 2023.06.07 |
[문제 풀이][Java] 백준 10610번 30 (4) | 2023.05.28 |
최근댓글