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
'Java' 카테고리의 다른 글
Enum 사용법 및 예제 (0) | 2019.04.29 |
---|---|
TreeSet, TreeMap 개념 및 사용법 정리 (정리중,,,,) (0) | 2019.03.04 |
[자바/JAVA] StringTokenizer 사용법 정리 (0) | 2019.03.03 |
[자바/JAVA] String, StringBuilder, StringBuffer 차이 정리 (0) | 2019.03.03 |
[자바/JAVA] String to int, int to String 변환하는 방법 (0) | 2019.03.03 |