https://www.acmicpc.net/problem/11720
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
문제
풀이
우선, 문제를 보면 N의 범위가 1부터 100까지이므로 값을 ing형, long형과 같은 숫자형으로 담을 수 없기 때문에 문자열 형태로 입력값을 받아야 한다.
👉 BufferedReader + String.charAt()
먼저 숫자의 개수인 n을 입력받고, 다음 줄에 숫자를 정수가 아닌 String형으로 입력을 받는다.
그리고 for문을 통해 입력받은 문자열의 첫 번째 원소(charAt(0)) 부터 마지막 원소(charAt(n)) 까지 각 원소의 누적 합을 구하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String str = br.readLine();
int sum = 0;
for(int i=0; i<n; i++)
sum += str.charAt(i) -'0'; // 문자열을 숫자형으로 변경
System.out.print(sum);
br.close();
}
}
👉 BufferedReader + getBytes()
문자열을 입력받을 때 해당 문자열을 쉽게 각 자릿값을 반환받을 수 있는 방법이 있다. 바로 getBytes() 메소드다.
getBytes() 메소드는 문자열을 바이트 배열로 변환하여 반환한다.
매개변수를 전달하지 않으면 시스템의 기본 charset을 사용하여 인코딩한다. 즉 UTF-16 인코딩으로 변경되는 값을 따른다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine();
int sum = 0;
for(byte value : br.readLine().getBytes())
sum += (value - '0');
System.out.print(sum);
br.close();
}
}
더보기
💬 value - '0' 연산을 수행하는 이유
입력된 문자열의 각 자리가 ASCII 코드 값으로 저장되기 때문이다.
문자열을 바이트 배열로 변환하면 ASCII 코드 값으로 구성된 배열이 생성되는데, 이를 이용하여 해당 문자가 나타내는 숫자 값을 구할 수 있다.
실행 결과