CharAt(int i)를 이용한 계산식에서 -'0'이 필요한 이유

geonu·2022년 1월 10일
3
post-thumbnail
post-custom-banner

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)을 빼주어야 의도한 리턴값을 얻을 수 있다.

profile
시작이 있어야
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 6월 13일

감사합니다 큰 도움되었습니다

답글 달기