baekjoon 2588
https://www.acmicpc.net/problem/2588
CharAt
CharAt 함수는 문자열에서 index를 통해 특정 위치의 문자를 반환받는 함수이다.
매개변수는 int형으로 받고 리턴값은 char형으로 반환된다.
String str = "안녕하세요.";
str.charAt(0); // 안
str.charAt(1); // 녕
str.charAt(2); // 하
str.charAt(3); // 세
str.charAt(4); // 요
str.charAt(5); // .
String num = "12345";
num.charAt(0); //1
num.charAt(1); //2
num.charAt(2); //3
num.charAt(3); //4
num.charAt(4); //5
만약 String형의 문자들을 CharAt 함수를 이용해서 반환 후 int형로 변환하여 계산식에 사용하고자 하면 아래와 같은 결과가 나온다.
String num = "12345";
num.charAt(0); // 1
num.charAt(1); // 2
(int) num.charAt(0) + (int) num.charAt(1); // 99
그 이유는 CharAt으로 반환받은 '1'은 int형이 아닌 char형, 즉 int로 변환시키면 아스키코드값인 49로 변환되기 때문.
'0'(char) -> 48
'1'(char) -> 49
'2'(char) -> 50
'3'(char) -> 51
'4'(char) -> 52
따라서 (int) num.charAt(0) + (int) num.charAt(1) 의 값은 99으로 출력된다.
이 때 -'0'(48)을 해주면
48 - 48('0') = 0
49 - 48('0') = 1
50 - 48('0') = 2
51 - 48('0') = 3
52 - 48('0') = 4
CharAt(int i) - '0'을 통해 char형의 문자들을 int형으로 변환시킬 수 있다.
마무리
CharAt(int index)로 추출한 숫자형 문자는 char형이므로 int형으로 변환 시 아스키코드로 변환된다.
따라서 '0'(48)을 빼주어야 의도한 리턴값을 얻을 수 있다.
감사합니다 큰 도움되었습니다