문제:
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
입력:
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
출력:
입력으로 주어진 숫자 N개의 합을 출력한다.
제출:
import java.util.Scanner;
public class Bj_11720 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String str = sc.next();
sc.close();
int sum=0;
for (int i=0; i<a; i++) {
sum = sum + str.charAt(i)-48;
}
System.out.println(sum);
}
}
String -> char -> int 형변환이 중요한 문제였다.
아래는 문자 0~9의 10진수, 16진수 값의 아스키 코드표이다.
아스키 코드표를 보면 char형의 (0, 1, 2)는 int형으로 (48, 49, 50)가 나오기 때문에
str.charAt(i) 값에서 48씩 빼서 해결했다. (48 대신 '0'으로 표현할 수도 있다.)
str.charAt(i)-48;
에러:
문제를 처음 접했을 때 String.str = sc.nextLine(); 으로 둘째 줄을 입력받으려고 하다가 java.lang.StringIndexOutOfBoundsException: String index out of range: 0 라는 에러가 발생하였는데 nextInt()에서 숫자를 입력받고 엔터를 입력하였더니 개행문자 전까지만 입력을 받고 개행문자(\n)는 nextLine()에서 str의 길이가 0이 되어버려 발생한 문제였다.
// 숫자 입력후 엔터를 눌러 에러가 발생한 예
int a = sc.nextInt();
String str = sc.nextLine();