알고리즘/백준

백준 2745번 진법 변환 자바 Java (☆공부 256일차)

김발자~ 2023. 4. 12. 21:58
반응형

2745 진법 변환

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

 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 

www.acmicpc.net

 

 

 


백준 2745번 문제 진법 변환


문제


 

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 18219 10129 8525 55.821%

문제

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

 

 

 


과정 생각해보기


 

https://gimbalja.tistory.com/202

 

공부 117일차: 백준 2745번 진법 변환 자바 java

2745 진법 변환 https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는

gimbalja.tistory.com

4달 전에 푼 문제

원리는 아래와 같다

 

 

풀기 전,n진법을 어떻게 10진수로 바꾸는지에 대해 알아야 한다

그림처럼 오른쪽부터 0제곱으로 시작해 왼쪽으로 갈수록 제곱의 크기가 1 늘어난다

그리고 그 각각의 제곱들과 주어진 자리의 수를 곱하여 더하는 방식으로 10진수를 출력할 수 있다

 

다만 숫자가 있다면 그대로 곱하면 되지만, 그 숫자가 9보다 커진다면 문자로 대체하므로 그 값이 각각 10~35가 될 수 있도록 55를 빼고 곱해야 한다

 

이전엔 55를 뺄셈했지만 이번엔 먼저 '0'을 빼서 정수로 만들어준 후, A~Z는 추가로 7을 더 빼서 중복을 줄였다

 

 

 


정답 인정 코드


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 st = new StringTokenizer(br.readLine());
 
        String n = st.nextToken();
        int b = Integer.parseInt(st.nextToken());
        int idx = n.length() - 1;
        int sum = 0;
        
        for(int i = 0; i < n.length(); i++) {
            int ch = n.charAt(i) - '0';
 
            if(ch > 16) {    // 'A' ~ 'Z'
                ch -= 7;    // 아스키코드로 '0'이 48이라서 총 55를 빼려면 -7 필요
            }
 
            sum += ch*Math.pow(b, idx);
            idx--;
        }
 
        System.out.println(sum);
    }
 
}
 
cs

 

 

 


중복을 줄이니 차이가 있다

반응형