2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
문제가 특이하다. n진법을 다루는 문제인데 처음에 약간 이해하기 빡셀수 있으나 몇번 예시를 들어보면 쉽다.
input의 예시는 ZZZZZ 36. 10진법을 넘어가는 숫자는 대문자 알파벳으로 표시한다라고 했다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
35 35 35 35 35을 36진법으로 표현하는 프로그램을 짜는것.
복잡해보이지만 어려울것 없다.
z 각각 한개는 자릿수를 구성하는 숫자 하나라고 보면 쉽다. 즉, 이를 10진법으로 표시한다면
35x(36^4)+35x(36^3)+...+35x(36^0) 이 되겠다. 10진법으로 print하기에 비교적 쉽다.
포인트는 알파벳을 숫자로 바꿔서 다뤄야하는데 "아스키 코드"를 활용하면 매우 쉽게 풀수있다.
아래는 알파벳이 할당되는 아스키 코드 값이다. char의 아스키코드는 int처럼 활용할수있다.
대문자 알파벳:
- 'A'부터 'Z'까지의 아스키 코드 값: 65부터 90까지
- 'A'의 아스키 코드: 65
- 'B'의 아스키 코드: 66
- ...
- 'Z'의 아스키 코드: 90
소문자 알파벳:
- 'a'부터 'z'까지의 아스키 코드 값: 97부터 122까지
- 'a'의 아스키 코드: 97
- 'b'의 아스키 코드: 98
- ...
- 'z'의 아스키 코드: 122
이거 참고해서 문자열을 숫자로 싹 바꿔주면 끝.
package 백준;
import java.util.Scanner;
public class _2745_진법변환 {
public static int getnum(char c) {
for(int i=65; i<=90; i++) {
if(c==i) {
c= (char) (i-55);
}
else {
continue;
}
}
return c;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String n = sc.next();
int b = sc.nextInt();
int[] 숫자변환 = new int[n.length()];
//n을 구성하는 녀셕들의 type 판별
for(int i=0; i<n.length(); i++) {
if(n.charAt(i) >= 65) {
숫자변환[i]=getnum(n.charAt(i));
}
else {
//char의 ascii code를 고려.
숫자변환[i] = n.charAt(i)-48;
}
}
long ans =0;
int 자릿수 = n.length();
for(int i=0; i<자릿수; i++) {
int first = 숫자변환[i];
int second = (int) Math.pow(b, 자릿수-(i+1));
System.out.println(first*second);
ans+=first*second;
}
System.out.println(ans);
}
}
'Algorithm_PS' 카테고리의 다른 글
백준 1018 <체스판 다시 칠하기> (0) | 2023.11.11 |
---|---|
백준 24313_<알고리즘 수업 - 점근적 표기 1> (0) | 2023.11.10 |
백준_2563 <색종이> (0) | 2023.10.20 |
백준_10798(세로읽기) (0) | 2023.10.19 |
백준_2941(크로아티아 알파벳) (0) | 2023.10.18 |