jacketList

진법 변환 2745번 본문

알고리즘/백준

진법 변환 2745번

ukkkk7 2023. 10. 24. 09:05
728x90
반응형

 

10진법을 넘어가는 수 N이 주어진다.

10진법을 넘어가기 때문에 알파벳 대문자를 사용해서 N을 표시한다.

B는 진법을 나타낸다.

 

실행과정

1. 문자열 N과 실수 B 제곱근을 표현해 줄 tmp변수, 총 합을 구해줄 sum 변수 선언

2. for문 안에서 문자열 N을 char타입으로 형변환 한다.(아스키 코드값 활용을 위해)

※ 주의할 점: for문 안에 조건식은 for(int i=n.length() - 1; i>=0; i--) 이렇게 되는데 진법 변환시 제일 마지막 글자 부터 적용하기 때문

ex) 5*2^3 + 5*2^2 + 5*2^1 + 5*2^0  <- 마지막 글자가 제일 첫 글자가 된다.

3. 10진법을 넘어갔을 때 A = 10부터라고 했으니 c가 A~Z 사이에 있을 때 조건과 c가 0~9사이에 있을 때의 조건문을 만든다.

4.조건문을 통해 얻어낸 값을 출력한다.

 

 

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());

        // 지수의 승을 높여주기 위해 선언 ex) 2^1, 2^2, 2^3...
        int tmp = 1;
        int sum = 0;

        // 문자를 입력하면 zzzzz 여기서 제일 끝 문자부터 탐색해야 하기 때문에 조건식은 하나씩 - 되도록 작성
        for(int i=n.length()-1; i>=0; i--){
            //10진법으로 변환해주기 위해 char형으로 변환
            char c = n.charAt(i);

            // 입력받은 문자가 해당 조건에 있다면
            if('A' <= c && c <= 'Z'){
                //입력받은 문자에서 65인 대문자 A를 빼주고 A가 10이라 했으니 10을 더해준다 이후 누적된 진법을 곱해준다.
                sum += (c -'A' + 10) * tmp;
            } else{
                // 문자가 대문자가 아니라면 0~9사이의 값이라는 거니까 실수 48에 해당하는 0을 빼주고 누적된 진법을 곱해준다
                sum += (c - '0') * tmp;
            }

            //입력받은 진법을 누적시켜준다
            tmp *= b;

        }


        System.out.println(sum);

    }
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

1018 체스판 다시 칠하기  (0) 2023.11.14
진법변환2 11005  (0) 2023.10.25
10809 알파벳 찾기  (0) 2023.09.28
3052 나머지  (0) 2023.09.05
5597 과제 안내신 분..?  (0) 2023.09.03