본문 바로가기
ONLINE JUDGE/문자열

[백준11720] 숫자의 합

by W_W_Woody 2022. 3. 5.

https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net


방법1. charAt() 이용하기

[Java] 💻String의 생성자와 메서드

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

댓글