OneDev

[Java] 백준 2745 - 진법 변환 본문

자료구조&알고리즘/BOJ

[Java] 백준 2745 - 진법 변환

one_dev 2023. 10. 2. 15:18

[문제]

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진법으로 출력한다.


 < 풀이 >

① B 진법 수 N 을 문자열로 받는다

② N의 각 자리의 문자를 B 진법에 맞게 바꿔 결과값에 담는다

문자열의 길이 (문자의 개수)가 n 이라고 가정했을 때

 

<소스 코드>

import java.util.Arrays;
import java.util.Scanner;

public class B2745 {
  
	// 문자 c 를 정수로 변환하는 메소드
	static int atoi(char c)
	{
		// 0 ~ 9 인 경우
		if (c >= '0' && c <= '9')
		{
			return (c - '0');
		}
		// 10 ~ 36 인 경우
		else if (c >= 'A' && c <= 'Z')
		{
			return (c - 'A' + 10);
		}
		return 0;
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
        
		//[입력] 첫째 줄에 N과 B가 주어진다((2 ≤ B ≤ 36)
		String n = scan.next();
		int b = scan.nextInt();
		
		int result = 0;// 결과를 저장할 변수
		
		/* 반복문에 사용할 변수 */
		int i = n.length() - 1; // 문자열 N 의 마지막 인덱스부터 계산할 것임
		char c; // 문자열의 N 의 각 문자를 보관할 변수
		int exp = 0; // 거듭제곱 연산시 지수로 사용될 변수
		
		// 변환
		while (i >= 0)
		{
			c = n.charAt(i); // i 번째 문자 (뒤에서부터 시작)			
			result += atoi(c) * Math.pow(b, exp); //(해당 문자가 B진법에서 가리키는 숫자) * (B 의 exp 승)
			exp++;
			i--;
		}		
		System.out.println(result);
	}
}

 

Comments