백준 2745번(일반 수학1-진법 변환)

하스코딩·2024년 9월 17일

풀이

  • 이 문제를 보고 솔직히 감이 잘 오지 않았다.
  • 10진법이라면 하위비트부터 10^0=1의 자리, 10^1=10의 자리, 10^2=100의 자리 이런 식으로 증가해 나간다.
  • 값은 0~9까지만 숫자로 표현 가능하고, 10부터는 대문자 'A'로 시작한다.
  • 따라서 각 자릿수를 증가시켜나갈 변수 x가 필요하다. x=1로 초기화해 1의자리부터 다음 비트로 넘어갈 때마다 B를 곱해줘서 B^i꼴로 증가시켜나간다.
  • 변수 result는 0~9 사이 문자라면 -'0'해서 숫자로 변환한 값에 자릿수 x를 곱해 더해준다.
  • 0~9범위 외에는 대문자 알파벳이므로 -'A'를 해주고 +10을 더해서 숫자로 변환해준다.
import java.io.*;
import java.lang.*;
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());//B진법
        int result =0;//10진수 결과
        int x = 1;//1의자리부터 시작

        for(int i =N.length()-1; i >= 0; i--){
            char ch = N.charAt(i);//맨 아래부터 한문자씩 검사

            if(ch>='0' && ch<='9'){
                //-'0' 해줘서 진짜 숫자로 변경후 자릿수 곱해 더함
                result += (ch-'0') * x;
            }
            else{
                //10부터 'A' 사용하므로 'A'로부터 떨어진 거리에 10더해준다
                //ch 'F'면 6+10= 16이 저장되는 것이다.
                result += (ch - 'A' + 10) * x;
            }
            //10진법이면 10의자리, 100의자리다. 즉, B의 자리만큼 곱해줌
            x *= B;
        }

        System.out.println(result);
        br.close();
    }
}

0개의 댓글