문제
https://www.acmicpc.net/problem/2745
B진법 수를 10진수로 변환하는 문제였다.
문제 풀이
1. 수동으로 진법 변환
이 문제는 주어진 문자열을 10진법으로 변환하는 문제이다. 첫 번째 풀이에서는 문자열을 뒤에서부터 처리하여 각 자리수에 대해 진법에 맞는 가중치를 곱해 누적하는 방식으로 문제를 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer t=new StringTokenizer(br.readLine()," ");
String N=t.nextToken();
int B=Integer.parseInt(t.nextToken());
int result=0;
int count=0; //인수
for(int i=N.length()-1;i>=0;i--) {
int c=N.charAt(i);
if(c>='A' && c<='Z') {
c=c-'A'+10;
}else {
c=c-'0';
}
result+=c*(int)Math.pow(B,count);
count++;
}
System.out.print(result);
}
}
2. Integer.parseInt() 활용
Integer.parseInt(String s, int radix) 메서드를 사용해서 간단하게 풀 수도 있다. 이 메서드는 보통 문자열을 정수로 변환하는 메서드인데 두 번째 인자로 주어진 진법으로 해석하여 첫 번째 인자인 문자열을 10진법 정수로 변환하는 기능도 가지고 있다.
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 t=new StringTokenizer(br.readLine()," ");
String N=t.nextToken();
int B=Integer.parseInt(t.nextToken());
int result=Integer.parseInt(N,B); //B진법의 문자열 N을 10진법 정수로 변환
System.out.print(result);
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/JAVA]2720번 세탁소 사장 동혁 (0) | 2025.03.20 |
---|---|
[백준/JAVA]11005번 진법 변환 2 (0) | 2025.03.19 |
[백준/JAVA]2563번 색종이 (0) | 2025.01.24 |
[백준/JAVA]10798번 세로읽기 (0) | 2025.01.24 |
[백준/JAVA]2566번 최댓값 (0) | 2025.01.23 |