[BOJ / java] 2745 : 진법변환
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
📚 Table of Contents
문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다.
이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출력
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
예제
예제 입력 1
ZZZZZ 36
예제 출력 1
60466175
문제 풀이
코드설명
- 코드의 동작방식:
- 사용자로부터 입력받은 문자열과 진법을 기반으로 10진법으로 변환하는 작업을 수행합니다.
- 문자열은 숫자와 알파벳 대문자로 구성될 수 있으며, 알파벳 대문자는 10 이상의 숫자를 표현합니다.
- 코드의 구성:
- 'import'를 사용하여 필요한 라이브러리를 불러옵니다.
- 메인 함수에서 사용자로부터 문자열과 진법을 입력받습니다.
- for문을 사용하여 문자열의 각 문자를 확인하고, 이를 10진법으로 변환합니다.
- 결과를 출력합니다.
- 코드의 핵심 부분:
- 문자열의 각 문자를 확인하는 for문입니다. 이 부분에서 문자가 숫자인지 알파벳인지 확인하고, 이에 따라 10진법으로 변환하는 과정이 이루어집니다.
- 변환된 10진법을 누적하여 최종 결과를 구하는 부분입니다.
- 코드의 흐름:
- 사용자 입력 → 문자열과 진법 분리 → 문자열의 각 문자를 10진법으로 변환 → 결과 누적 → 최종 결과 출력
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _01_진법변환 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // BufferedReader를 사용하여 입력을 받습니다.
StringTokenizer st = new StringTokenizer(br.readLine()); // 공백을 기준으로 문자열을 분리합니다.
String s = st.nextToken(); // 첫 번째 토큰을 문자열로 저장합니다.
int b = Integer.parseInt(st.nextToken()); // 두 번째 토큰을 진법으로 저장합니다.
int idx = 0;
int num = 0;
int result = 0;
for (int i = s.length() - 1; i >= 0; i--) { // 문자열의 끝에서 시작하여 처음까지 확인합니다.
char c = s.charAt(i); // 문자열의 각 문자를 확인합니다.
if (c >= '0' && c <= '9') { // 문자가 숫자인 경우
num = c - '0'; // 숫자로 변환합니다.
} else { // 문자가 알파벳인 경우
num = c - 55; // 알파벳을 숫자로 변환합니다.
}
result += num * Math.pow(b, idx++); // 진법에 따른 가중치를 곱하고 결과에 더합니다.
}
System.out.print(result); // 최종 결과를 출력합니다.
}
}
'Coding > Backjoon' 카테고리의 다른 글
[BOJ / java] 2720 : 세탁소 사장 동혁 (0) | 2024.03.08 |
---|---|
[BOJ / java] 11005 : 진법변환2 (0) | 2024.03.07 |
[BOJ / java] 2563번 : 색종이 (0) | 2024.03.06 |
[BOJ / java] 10798번 세로 읽기 (2) | 2024.03.05 |
[BOJ / java] 2566번 최댓값 (0) | 2024.03.05 |