알고리즘 문제풀이/Beakjoon

[자바/백준] 10952번 A+B - 5 (단계별 4 - while문)

joah.k 2021. 6. 30. 13:33
728x90

두 정수를 A,B를 입력 받고, A+B를 출력하는 문제 

 

 

해결 1. 간단한 처리 

package step04_while;

import java.util.Scanner;

public class step04_01 {
    public static void main(String[] args) {
        // 10952번. A+B-5
        Scanner sc = new Scanner(System.in);

        while (true){
            int A = sc.nextInt();
            int B = sc.nextInt();
            if(A==0 && B==0) {
                sc.close();
                break;
            }
            System.out.println(A+B);
        }
    }
}

 

해결 2. 성능 향상을 위한 방법 

- Scanner 대신 BufferedReader를 사용한다 (시간 단축)

BufferedReader는 readLine()을 통해 문자열을 한 줄 단위로 입력받기 때문에 공백이 섞일 수가 있다. 

   => 공백을 기준으로 문자열을 분리해줘야 하는데 이 때 StringTokenizer 를 사용 

- StringTokenizer의 메서드를 사용해 문자열을 분리하고 꺼내와야 하는데 이 때

  .nextToken() 는 문자열을 반환하므로 Integer.parseInt()로 int 형으로 변환한다. 

- 출력을 할 때에도 println 보다는 StringBuilder를 사용해 속도를 더 빠르게 해준다. 

package step04_while;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class step04_01_2 {
    public static void main(String[] args) throws IOException {
        // 성능 향상을 위한 방법

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        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;
            }
            sb.append((A+B)).append('\n');
        }
        System.out.println(sb);
    }
}

 

 

확실히 성능 차이가 있다는 걸 눈으로 확인할 수 있다. 

728x90