[BaekJoon] 11720번 - 숫자의 합 (java)
1. 문제
👉 문제 바로가기
- 조건
시간 제한 | 메모리 제한 |
---|---|
1초 | 256MB |
- 문제
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
- 입력
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
- 출력
입력으로 주어진 숫자 N개의 합을 출력한다.
- 예제
입력 | 출력 |
---|---|
1 1 |
1 |
5 54321 |
15 |
25 7000000000000000000000000 |
7 |
11 10987654321 |
46 |
2. 풀이
- 알고리즘
for 반복문
을 사용해 첫번째 입력 값만큼 반복하여 두번째 입력 값의 모든 자리수의 합을 출력한다.
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문 작성;
}
2개의 입력방식을 사용해서 결과를 출력한다.
- Scanner 클래스
- BufferedReader 클래스
3가지 방법을 사용해서 두 번째로 입력받은 값의 각 자릿수의 합을 구한다.
- charAt()
- getBytes()
- BufferedReader 의 read()
2-1. Scanner 클래스 + charAt()
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String str = sc.next();
int sum = 0;
sc.close();
for(int i = 0; i < N; i++){
sum += str.charAt(i) - '0';
}
System.out.println(sum);
}
}
위와같이 객체를 생성할 때, Scanner(System.in) 에서
System.in
은 입력한 값을Byte 단위
로 읽는것을 뜻한다.
int 형 데이터를 입력받기 위해
nextInt()
메서드를 사용한다.
String 형 데이터를 입력받기 위해next()
메서드를 사용한다.
String 클래스의
charAt() 메서드
는 문자열 각 자릿수의 값을 구한 후, 해당 문자의 아스키코드 값을 반환한다.
'0'
또는 0 의 아스키코드48
을 빼서 숫자를 구한다.
[여기서 잠깐!]
2-2. BufferedReader 클래스 사용
① 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(); //변수에 저장할 필요가 없어서 입력만 받음
int sum = 0;
for(byte value : br.readLine().getBytes()){
sum += (value - 48);
}
System.out.println(sum);
br.close();
}
}
확장 for 문
for(타입 변수명 : 배열){ }
배열에 저장된 값을 순서대로 반복한다.
getBytes()
는 readLine() 으로 읽어들인 문자를byte[]
로 반환한다.
배열에 문자의 값을 저장하기 때문에 ‘0’ 또는 48 을 빼야한다.
[여기서 잠깐!]
BufferedWriter 클래스
에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.② BufferedReader + BufferedReader 의 read()
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));
int N = Integer.parseInt(br.readLine());
int sum = 0;
for(int i = 0; i < N; i++){
sum += br.read() - 48;
}
System.out.println(sum);
br.close();
}
}
br.read()
는 문자 하나를 읽어아스키코드 값
으로 출력한다.
'0'
또는 0 의 아스키코드48
을 빼서 숫자를 구한다.
읽을 문자가 없는 경우엔 -1을 반환한다.
3. 성능 비교
위에서 부터 순서대로
BufferedReader + getBytes()
BufferedReader + BufferedReader의 read()
Scanner + charAt()
위와같이 입력 메소드와 알고리즘 구현 방법에 따라 시간이 달라질 수 있다.
입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.
관련 페이지
Leave a comment