posted by 귀염둥이채원 2019. 3. 3. 21:48

# Scanner

- Scanner는 사용하기 편리지만 속도가 느리다.

- 공란과 줄바꿈을 입력값의 경계로 사용하며, 입력받은 즉시 자료형이 확정된다.


# BufferedReader

- 일반적으로 라인단위로 입력을 받는다.

- 입력받은 값이 String 타입이므로 타입변환이 필요해서 불편함이 존재

- throws Exception 혹은 try ~ catch 를 이용해서 Exception을 따로 처리가 필요


하지만 많은 양의 데이터를 입력받을경우 BufferedReader를 통해 입력받는 것이 효율면에서 훨씬 낫습니다.알고리즘 문제를 풀때는 BufferedReader를 사용하는 것이 좋다.


# 성능 차이 참고

https://algospot.com/forum/read/2496/


# Scanner 예제 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class ScannerPractice {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // Integer Type Input
        int intValue = sc.nextInt();
 
        // Long Type Input
        long longValue = sc.nextLong();
        
        // Double Type Input
        double doubleValue = sc.nextDouble();
 
        // String Type Input
        String strValue = sc.next();
 
        // Boolean Type Input
        boolean boolValue = sc.nextBoolean();
    }
}
 
cs


# BufferedReader 예제 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class BufferedReaderTest {
    // BufferedReader는 Exception이 처리를 따로 해줘야 하기 때문에 throws를 해주거나 
    // try ~ catch로 예외처리를 해줘야합니다.
    public static void main(String[] args) throws Exception {
        // BufferedReader 객체 생성
        // new InputStreamReader 및 System.in
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        // StringTokenizer 객체 선언
        StringTokenizer st = null;
 
        // String Line이므로 Integer.parseInt를 이용하여 형변환해야함
        int n = Integer.parseInt(br.readLine());
 
        // "1 3 5 7" 식으로 공란 포함 String Line일시 StringTokenizer 이용
        int[] arrays = new int[n + 1];
        st = new StringTokenizer(br.readLine());
        for (int i = 1; i <= n; i++) {
            // 배열에다 토큰을 하나씩 불러서 입력해줌
            arrays[i] = Integer.parseInt(st.nextToken());
        }
    }
}
 
cs


# BufferedReader + StringBuiler 예제 소스

알고리즘 풀때는 한꺼번에 모아서 입력을 받고 한꺼번에 모아서 출력하는 것이 성능이 좋다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    public static void main(String[] args) throws IOException{
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
 
        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[10010];
 
        for (int i = 0; i< N;i++){
            arr[Integer.parseInt(br.readLine())]++;
        }
 
        for(int i =0; i<= 10000; i++){
            while(arr[i] != 0){
                sb.append(""+i+"\n");
                arr[i]--;
            }
            
        }
        System.out.println(sb.toString());
    }
}
 
 
출처: https://lifeignite.tistory.com/34 [게임 && PS ignite]
cs


# 참고사이트

https://cocomo.tistory.com/507

https://coding-factory.tistory.com/251

https://mygumi.tistory.com/236

https://code0xff.tistory.com/5

https://lifeignite.tistory.com/34