문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.
출력
각 테스트 케이스마다 A+B를 출력한다.
내 코드
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(true){
int num1, num2;
num1 = scan.nextInt();
num2 = scan.nextInt();
if (num1==0 && num2==0) {
break;
}
System.out.println(num1 + num2);
}
scan.close();
}
}
생각해야 할 것
- 두 정수의 입력 값이 공백 하나를 기준으로 구분되어 주어진다.
- 마지막은 두 정수가 모두 0인 입력 값이 들어온다. (이 입력 값을 while문의 종료 조건으로 넣어야 한다는 뜻)
개선된 답안 (개선된 코드)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
while(true){
st = new StringTokenizer(br.readLine()," ");
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
if (A==0 && B==0) {
break;
}
System.out.println(A + B);
}
}
}
Scanner는 연속된 입력 값을 처리하는데, 속도가 느린 편이다. 그래서 보다 빠른 입력이 필요로 하는 경우 다른 입력방식인 BufferedReader을 사용한다. readLine은 리턴 값으로 String을 돌려주기 때문에 다른 타입이 필요로 하는 경우 형변환을 꼭 처리해주어야 한다. 그리고 항상 예외처리를 해주어야 하기 때문에 try & catch 또는 throws문을 추가한다.
또한 Line단위로 데이터를 받아오기 때문에 공백 단위로 데이터를 작업하려면 StringTokenizer 또는 String.split을 이용하여 처리해야 한다.
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 2562번/1차원 배열] 최댓값 - Java (0) | 2021.03.15 |
---|---|
[백준 10818번/1차원 배열] 최소, 최대 - Java (0) | 2021.03.15 |
백준 10950번 for문 A+B ③ - Python (0) | 2021.02.17 |
백준 2379번 for문 구구단 - Python (0) | 2021.02.17 |
백준 2884번 if문 알람 시계 - Python (0) | 2021.02.17 |