백준 11720번 숫자의 합-JAVA11
정수를 문자열로 입력받는 문제. Python처럼 정수 크기에 제한이 없다면 상관 없으나, 예제 3은 일반적인 정수 자료형에 담기에 너무 크다는 점에 주목합시다.
문제 :
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
입력 :
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
예제입력 :
입력
5
54321
출력
15
FLOW :
- Scanner를 통해 입력값을 입력받아서 사용
- 첫번째 입력받은 int 크기의 String 배열을 만들어 줌 -> numberList
- 다음 숫자는 String 으로 입력받음 -> number
- 문자열을 자르는 substring을 사용하면 반복문으로 한자리씩 배열에 넣어줄 수 있을꺼라고 생각함
- 각 자리의 숫자를 Integer.parseInt를 통해 int로 바꿔주어 합계를 구함
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String number = scan.next();
String[] numberList = new String[n];
int sum = 0;
for(int i = 0; i<n; i++) {
numberList[i] = number.substring(i, i+1);
sum += Integer.parseInt(numberList[i]);
}
System.out.println(sum);
}
}
- BufferedReader를 사용한 다른 풀이 (Reference)
- 테스트 결과 2배 빠름 👍🏽
getBytes() 를 통해 쉽게 각 자릿값을 반환 받을 수 있다. String (문자열) 에 대하여 해당 문자열을 하나의 byte 배열로 변환해주는 메소드다.
즉, readLine() 으로 읽어들인 문자를 byte[] 로 변환하여 반환되므로 for-each 구문을 통해 문자열의 문자를 하나하나씩 읽어들일 수 있다.
이때 말했듯이 UTF-16 인코딩에 맞게 각 문자의 값을 저장하므로 반드시 ‘0’ 또는 48 을 빼주어야 한다.
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(); //N은 쓸모가 없으므로 입력만 받는다.
int sum = 0;
for(byte value : br.readLine().getBytes()) {
sum+= (value - '0');
}
System.out.println(sum);
}
}
Reference 📝
Leave a comment