[백준 Math1] 2745번 문제

Kwon·2023년 12월 4일

백준

목록 보기
17/22
post-thumbnail

백준 2745번 문제

풀이

  • B진법 수 N 입력 받은 후 10진법으로 변환하는 문제
  • 알파벳 대소문자 구별 없음
  • for문과 if문을 적절히 사용하는 문제
import java.util.Scanner;

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

        String B = sc.next();
        int N = sc.nextInt();
        char[] c = new char[B.length()];
        double result = 0;

        for (int i = 0; i < c.length; i++) {
            c[i] = B.charAt(i);
            int code = 10;
            if ((int) c[i] > 64) {
                for (int j = 65; j <= 90; j++) {
                    if (c[i] == j || c[i] == j+32) {
                        result += (Math.pow(N, ((int) (c.length) - (i + 1)))) * (code);
                        break;
                    }
                    code++;
                }
            } else {
                result += (int)(c[i]-'0') * (Math.pow(N, c.length - (i+1))); // 진법^자리 수
            }

        }
        System.out.println((int) result);
    }
}

1. B진법 N 입력

String B = sc.next();
int N = sc.nextInt();
char[] c = new char[B.length()];
double result = 0;
for (int i = 0; i < c.length; i++) {
    /*
    ....for문 내용.....
    */
}
System.out.println((int) result);
  • 처음 알파벳 혹은 숫자 입력 후 N진수 입력
  • char 변수 이용해 입력 받은 B의 길이 만큼 배열 설정
  • for문은 분리한 B의 변수를 삽입한 c를 검사하기 위해 이용

2. N진법 글자 추출

c[i] = B.charAt(i);
int code = 10;
if ((int) c[i] > 64) {
    for (int j = 65; j <= 90; j++) {
        if (c[i] == j || c[i] == j+32) {
            result += (Math.pow(N, ((int) (c.length) - (i + 1)))) * (code);
            break;
        }
        code++;
    }
} else {
    result += (int)(c[i]-'0') * (Math.pow(N, c.length - (i+1))); // 진법^자리 수
}
  • 첫 번째 if문을 이용해 아스키 코드 A(=65)이상 일 시 입장
  • 두 번째 for문을 이용해 A~Z검사
  • 두 번째 if문에 대, 소문자 아스키 코드(A~Z, a~z)검사 후, 검사가 true일 시 result에 해당 B진법 수 10진법으로 변경한 값 넣음

    ex) N진법 B * N진법^0~n 자리 수

profile
📲 @bu_kwon_2 / 💻 dnu05043.log / ⌨ Back-end / 🦁 LikeLion

0개의 댓글