본문 바로가기

알고리즘/문제 풀이

백준 2745번 해답

2745번: 진법 변환 (acmicpc.net)

 

2745번: 진법 변환

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

www.acmicpc.net

1. 내 코드 

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        ArrayList<Integer> list = new ArrayList<>();

        // 입력값, 진법 받기
        String s = sc.next();
        int numeral = sc.nextInt();

        // 총합
        int total = 0;

        // 계속 진법을 곱해나갈 지수
        int numeralQuotient = 1;


        // String으로 받은 값 쪼개기.
        // 만약에 쪼개진 문자가 1~9 사이라면, 그대로 값 받아서 사용
        // 만약에 쪼개진 숫자가 65~90 사이라면 -55 해서 사용

        for (int i = 0; i < s.length(); i++) {
            if(s.charAt(i) - '0' >=0 && s.charAt(i) - '0'< 10){
                list.add(s.charAt(i)-'0');
            }
            else{
             list.add(s.charAt(i)-55);
            }
        }

        for (int i = list.size()-1; i >= 0 ; i--) {
            total += list.get(i)* numeralQuotient;
            numeralQuotient *=numeral;
        }

        System.out.println(total);
    }
}

2. 배운 것

char -> int 형 변환을 어떻게 하는지 까먹었었다. 

String의 경우 String에 적힌 내용 그대로를 10진법으로 바꾸길 원한다면, Integer.parseInt(값, 진법)으로 하면 된다. 

 

char의 경우 방법이 3가지 이다. 

 

1. (int)로 강제 형변환 

char c = 'A'

int a = (int)c

// a 출력 시, 65가 나온다.

만약에 char 값의 아스키 코드 값 자체가 필요할 경우 사용이 용이 하다. 

 

2. char 형태로 적힌 숫자 0~9를 그 내용물 그대로 int로 바꾸는 법

char c = '9'
int a = c - '0'

// a 출력 시 9가 출력된다.

c는 '9'라는 문자 값인데 아스키 코드 상 57이란 값을 가진다. 따라서 '0'의 아스키 코드인 48을 빼주면 원래 값 9가 나온다. 

char 값 끼리 사칙 연산을 진행하면, 해당 char 값의 아스키 코드로 계산이 이루어져서, 숫자 값이 도출된다는 것을 이용한다. 

char 값끼리 혹은 char 와 int 값 사이에 사칙연산을 진행하면 결과는 int 값 임을 이해하자. 

 

3. Character라는 Wrapper Class의 함수인 getNumericValue 이용하기

char c= '9'

int a = Character.getNumericValue(c)

// a 출력시 값은 9가 나온다.

해당 하수 이용 시 내용물 자체가 숫자로 나온다.

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 2720번 해답  (0) 2023.06.10
백준 11005번 진법 변환2  (0) 2023.06.10
백준 2563번 색종이  (0) 2023.06.08
백준 10798번 세로읽기  (0) 2023.06.07
백준 2566번 최댓값  (0) 2023.06.07