https://www.acmicpc.net/problem/11720
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
방법1. charAt() 이용하기
package s07_string;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MJ_02_11720 {
public static void main(String[] args) throws IOException {
//charAt()
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int count = 0;
String S = br.readLine();
for(int i=0;i<N;i++) {
count += S.charAt(i)-48;
}
br.close();
System.out.println(count);
}
}
charAt() 은 해당 문자의 아스키코드 값을 반환하므로 반드시 -48 또는 -'0' 을 해주어야 우리가 입력받은 숫자 값 그대로를 사용할 수 있다.
방법2. getBytes() 이용하기
package s07_string;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MJ_02_11720_2 {
public static void main(String[] args) throws IOException {
//getBytes()
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine();
int count = 0;
//for-each
for(byte value : br.readLine().getBytes()) {
count += (value -'0');
}
br.close();
System.out.println(count);
}
}
우리는 문자열을 입력받을 때 해당 문자열을 쉽게 각 자릿값을 반환받을 수 있는 방법이 있다.
바로 getBytes() 이다.
이 메소드는 java.lang.string 패키지에 있는 메소드로 따로 import 할 필요 없이 사용할 수 있다.
설명을 하자면 String (문자열) 에 대하여 해당 문자열을 하나의 byte 배열로 변환해주는 메소드다.
이 때, 변환되는 방법은 Charset 에서 사용되는 인코딩 방식, 즉 UTF-16 인코딩으로 변경되는 값을 따른다.
* UTF-16 (유니코드)의 앞부분은 아스키코드와 호환되기 때문에 영어 문자 및 숫자는 같다. 즉 아스키 코드에서 0 이라는 문자는 48 라는 값이고 이는 UTF-16 에서도 48 이라는 값을 갖는다.
readLine() 으로 읽어들인 문자를 byte[] 로 변환하여 반환되므로 for-each 구문을 통해 문자열의 문자를 하나하나씩 읽어들일 수 있다.
for-each문(확장 for문)
'ONLINE JUDGE > 문자열' 카테고리의 다른 글
[백준1152] 단어의 개수 (0) | 2022.03.11 |
---|---|
[백준1157] 단어 공부 (0) | 2022.03.10 |
[백준2675] 문자열 반복 (0) | 2022.03.09 |
[백준10809] 알파벳 찾기 (0) | 2022.03.08 |
[백준11654] 아스키 코드 (0) | 2022.03.04 |
댓글