티스토리 뷰

반응형

 

백준 문제 보기

 

두 가지 방법을 이용하여 풀어보겠다.

 

자바에서 입력을 받는 방식은 크게 두 가지인데,

ScannerBufferedReader이다.

 

흔히 학교에서 (전공생의 경우) 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의 결과이다.

 

짧은 예제에도 충분히 출력을 한 번만 하는 코드의 효과는 위와 같이 확실하다!

 


이 문제는 별다른 어려움 없이 해결할 수 있는 문제였다.

문제를 보다 이해가 안되거나 설명이 이상한 부분이 있으면 댓글을 활용해주길 바란다.

반응형