백준 11720 / 숫자의 합
문제
풀이
설명
첫 번째 입력받은 값은 숫자의 갯수
두 번째 입력받은 값은 값의 각 자릿수의 합을 구하는 문제이다.
문자열 입력문제라고 볼 수 있다.
Scanner로 입력받아 charAt()을 사용하여 푸는 방법
BufferedReader로 입력받아 getBytes()을 이용하여 푸는 방법 두가지가 있다.
코드
- Scanner로 입력받아 charAt()을 사용하여 푸는 방법
import java.util.Scanner;
public class Num11720 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 숫자의 갯수 n을 입력받음
String a = sc.next(); // 숫자를 정수가 아닌 문자열로 입력 받는다.
sc.close();
int sum = 0;
// 반복문을 통해 입력받은 문자열의 첫번째 원소 ( charAt(0) ) 부터
//마지막 원소 ( charAt(n) ) 까지 각 원소의 누적 합을 구한다.
for (int i = 0; i <n; i++) {
sum += a.charAt(i)-'0';
}
System.out.print(sum);
}
}
코드설명
첫번째 입력은 숫자 개수 N입력
두번째 입력은 정수가 아닌 String으로 입력을 받는다
그리고 for문을 통해 입력받은 문자열의 첫번째 원소(charAt(0))부터 마지막 원소 (charAt(n))까지 각 원소의 누적 합을 구하면 된다.
이때, charAt()은 해당 문자의 아스키코드 값을 반환하므로 반드시 -'0' 또는 -'48'을 해주어야 우리가 입력받은 숫자 값 그대로를 사용할 수 있다.
- BufferedReader로 입력받아 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 을 빼주어야 한다.
참고 : https://st-lab.tistory.com/61
출처 : https://www.acmicpc.net/problem/11720
Author And Source
이 문제에 관하여(백준 11720 / 숫자의 합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dogit/백준-11720-숫자의-합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)