[백준] 2745

당당·2023년 4월 18일
0

백준

목록 보기
1/179
post-thumbnail

https://www.acmicpc.net/problem/2745

📔문제

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다.
이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35


📝입력

첫째 줄에 NB가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.


📺출력

첫째 줄에 B진법 수 N을 10진법으로 출력한다.


📝예제 입력 1

ZZZZZ 36

📺예제 출력 1

60466175

🔍출처

-문제의 오타를 찾은 사람: bupjae


🧮알고리즘 분류

  • 수학
  • 구현
  • 문자열

📃소스 코드

import java.util.Scanner;

public class Code2745 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		String string=scanner.next();
		int base=scanner.nextInt();
		int len=string.length();
		int num=0;
		double total=0;
		int answer=0;
		
		for(int i=0;i<len;i++) {
			num=change(string, i);
			total=total+num*Math.pow(base, len-i-1);
		}
		
		answer=(int)total;
		System.out.println(answer);
		
	}

	public static int change(String string, int i) {
		int num=0;
		if('A'<=string.charAt(i) && string.charAt(i)<='Z') {
			num=string.charAt(i)-'A'+10;
		}
		else {
			num=string.charAt(i)-'0';
		}
		return num;
		
	}

}

📰출력 결과


📂고찰

처음엔 사실 switch문으로 작성해서 case 하나하나 'A' ... 'Z'에 대한
값을 num으로 반환하는 함수를 작성했었다. 그러나, 다른 방향으로 접근했다.

만약, 입력값이 알파벳이면(대문자 인건 확정) 'A'를 빼주고, A값이 10이니
10을 더해주고 그렇지않으면, 숫자이니 char to int를 위해 '0'을 빼주자.

이번엔 math 클래스의 pow 메소드를 사용했다.
Math.pow(a,b)a^b로 계산된다.

profile
MySQL DBA 신입 지원

0개의 댓글