백준 11720번을 풀다가, 숫자를 char 형으로 받은 후 (int)형으로 형변환을 했더니 이상한 숫자 값이 나왔다.
char형은 숫자로 변환할 시 아스키 코드로 저장하기 때문이었다! 그래서 변환된 숫자 값에 48이나 '0'을 빼주면 원하는 숫자값을 얻을 수 있었다.
- char형을 숫자형으로 변환하기 위해 (int)를 붙여준다.
- char형은 숫자를 저장할 때 아스키코드 값으로 저장되므로, 48 또는 '0'을 빼 주어 숫자로 활용한다.
import java.io.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
// 입력받기
int N = Integer.parseInt(br.readLine()); // 입력 숫자의 개수
char[] ch = br.readLine().toCharArray();
// 숫자 N개의 합 계산
int sum = 0;
for(int i=0; i<N; i++){
sum += (int)ch[i] - 48 ; // char형 숫재를 int형 숫자로 변환
}
// 합 출력
System.out.println( sum );
}
}
하지만 번거롭게 48을 빼주지 않아도, Character 클래스에 char형 숫자를 int형으로 '그대로' 변환해주는 메소드가 있다!
Character.getNumericValue() 를 활용해보자.
import java.io.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
// 입력받기
int N = Integer.parseInt(br.readLine()); // 입력 숫자의 개수
char[] ch = br.readLine().toCharArray();
// 숫자 N개의 합 계산
int sum = 0;
for(int i=0; i<N; i++){
sum += Character.getNumericValue(ch[i]); // char형 숫재를 int형 숫자로 변환
}
// 합 출력
System.out.println( sum );
}
}