2가지 방법이 있다.
1. Scanner 로 입력받아 charAt() 을 사용하여 푸는 방법
2. BufferedReader 로 입력받아 getBytes() 을 이용하여 푸는 방법
방법 1.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
String a = in.next();
in.close();
int sum = 0;
for(int i =0; i < N; i++){
sum += a.charAt(i) - '0';
}
System.out.print(sum);
}
}
Scanner를 이용한 가장 기본적인 방법.
첫 줄 입력인 N -> 숫자의 갯수
다음줄 : String(문자열)로 입력을 받는다.
for 문을 통해 입력받은 문자열의 첫번째 원소(charAt(0)) 부터 마지막 원소(charAt(N)) 까지 각 원소의 누적 합을 구하면 된다.
이때 charAt()은 해당 문자의 아스키 코드 값을 반환하므로 반드시 -48 혹은 -'0'을 해주어야 우리가 평소에 사용하는,
입력받은 숫자 값 그대로를 사용할 수 있다.
2.
우리는 문자열을 입력받을 때 해당 문자열을 쉽게 각 자릿값을 반환받을 수 있는 방법이 있다.
바로 getBytes() 이다.
이 방법은 배열을 사용하지 않아도 된다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine(); // N은 쓸모가 없어도 입력을 받아서 빼줘야 다음 라인을 받을 수 있다.
int sum = 0;
for (byte value : br.readLine().getBytes()) {
sum += (value - '0'); // 또는 (a-48) (아스키 코드니까)
}
System.out.print(sum);
}
}
- getBytes() 는 문자열을 byte 배열로 반환한다.
즉, readLine() 으로 읽어들인 문자를 byte[] 로 변환하여 반환되므로 for-each 구문을 통해 문자열의 문자를 하나하나씩 읽어들일 수 있다.
이때 UTF-16 인코딩에 맞게 각 문자의 값을 저장하므로 반드시 '0' 또는 48 을 빼주어야 한다.
위의 것이 BufferedReader를 사용
아래 것이 Scanner를 사용.
확연히 성능이 BufferedReader가 좋다.
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 2908 - 상수 - JAVA[자바] (0) | 2022.12.02 |
---|---|
[백준] 10809 - 알파벳 찾기 - JAVA[자바] (0) | 2022.11.29 |
[백준] 11654 - 아스키 코드- JAVA[자바] (0) | 2022.11.29 |
[백준] 1065 -JAVA[자바] (0) | 2022.11.29 |
[백준] 4673 - JAVA[자바] (0) | 2022.11.29 |