[백준] 10951번 문제 - A+B-4 - JAVA(자바)
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
각 테스트 케이스마다 A+B를 출력한다.
처음 봤을 땐 배열에 저장해서 한번에 값이 출력되도록 해보았다.
import java.util.Scanner;
public class b10951 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] A = new int[10];
int i;
int sol;
for (i = 0; i < 10; i++) {
A[i] = sc.nextInt();
}
for (i = 0; i < 5; i++) {
sol = A[2 * i] + A[2 * i + 1];
System.out.println(sol);
}
}
}
위와 같이 하면 예제입력을 했을때 출력값이 한번에 나왔다.
이렇게 출력되니 백준에서는 답이 틀렸다고 나왔다.
그러고는 도저히 어떻게 풀어야 할지 모르겠어서 검색을 해 해답을 보았다..
첫번째는...
import java.util.Scanner;
public class b10951_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a + b);
}
sc.close();
}
}
hasNextInt 메서드를 사용하는것이다.
hasNextInt는 Scanner에서 정수를 입력 받은 경우 ture 정수를 입력 받지 않은 경우 false의 값을 반환하는 메소드이다.
두번째 방법으로
BufferedReader 를 쓰는방식인데.
이전부터 Scanner 대신 사용을 해 코드를 쓰시는분들이 계속있었는데 무시하고 있다가, 이 기회에 공부해보려 한번 따라 해봤다.
readLine()을 통해 입력받아서 연산하는 방법이다.
문자열 분리를 해서 읽어야하는데
1. StringTokenizer 클래스를 이용해서 분리한다.
2. Split()을 이용한다.
StringTokenizer는 특정 상황 아니면 성능면에서 훨씬 좋다고한다.
그리고 출력할 땐 StringBuilder를 쓴다.
st.nextToken() 은 문자열을 반환하니, Integer.parseInt() 로 INT형 변환 시켜줘야한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class b10951_3 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
String str;
while ((str = br.readLine()) != null) {
st = new StringTokenizer(str, " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(a + b).append("\n");
}
System.out.print(sb);
}
}
보면서 따라 해보았는데, 도저히 너무 코드가 생소해서그런지 어렵게 느껴졌다.
앞으로도 BufferedReader 사용법을 같이 연습해봐야겠다.