[코딩테스트] 백준 자바 10952번
백준 문제 보기
두 가지 방법을 이용하여 풀어보겠다.
자바에서 입력을 받는 방식은 크게 두 가지인데,
Scanner와 BufferedReader이다.
흔히 학교에서 (전공생의 경우) Scanner를 이용하여 예제를 많이 풀어보았을텐데,
속도는 BufferedReader가 훨씬 빠르다.
그래서 BufferedReader를 이용하여 두 가지 방식으로 문제를 풀었다.
첫 번째 풀이
먼저 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Q10952 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
StringTokenizer 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);
}
}
}
while 단계의 문제이기 때문에 while문을 사용했고,
BufferedReader로 값을 입력받은 다음,
StringTokenizer를 이용하여 A와 B를 분리해줬다.
현재 while문의 조건이 true이기 때문에
if문으로 조건식을 넣어 A==0&&B==0일 때
while문을 빠져나올 수 있도록 설계했다.
또한 System.out.println(A+B);를 이용해 값을 출력해줬다.
두 번째 풀이
두 번재로 BufferedReader에 StringBuilder로 출력해 풀어보았다.
먼저 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Q10952 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while(true) {
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
if(A==0 && B==0) {
break;
}
sb.append(A+B);
sb.append("\n");
}
System.out.println(sb);
}
}
StringBuilder sb = new StringBuilder();로 StringBuilder 객체를 생성하고
sb.append(A+B);를 통해 값을 추가하였다.
결론적으로 System.out.println(sb); 를 통해 한 번만 출력하므로
예제의 경우 while문안에서 반복 횟수가 적어 효과가 미미하지만
반복 횟수가 많아진다면 충분히 효과가 있을 것이라 생각된다.
실행 결과
두 방법의 결과는 다음과 같다.
위가 방법 1의 결과이고,
아래가 방법 2의 결과이다.
짧은 예제에도 충분히 출력을 한 번만 하는 코드의 효과는 위와 같이 확실하다!
이 문제는 별다른 어려움 없이 해결할 수 있는 문제였다.
문제를 보다 이해가 안되거나 설명이 이상한 부분이 있으면 댓글을 활용해주길 바란다.