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 |