반응형
알고리즘 문제를 풀다 보면
공백으로 입력받는 경우, 줄간 입력받는 경우 등 다양하게 입력받을 수 있어야 하며
이때 그냥 scanner 기능으로 입력받는 게 아닌 빠른 속도로 입력받기 위해 BufferedReader와
빠르게 출력하기 위한 BufferedWriter 기능을 쓸 줄 알아야 한다.
Scanner / BufferedReader 차이
Scanner
- 입력을 받을 때 공백(space)과 개행(enter)을 모두 경계로 인식한다.
- next(), nextInt(), nextchar() 등 형태를 지정 가능
BufferedReader
- 개행(enter)으로만 경계 인식
- String 형태로만 저장됨 (형 변환이 필요)
- Scanner에 비해 월등히 빠른 속도
위와 같이 구분 가능하다.
정수 하나만 받을 때
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.readLine으로 받은 String 형태를 Integer.parseInt로 int형 변환을 통해 정수 하나를 저장할 수 있다.
공백으로 구분된 정수 여러 개
1. StringTokenize 사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
1 2 3 이 입력되면
각각 m, n, k에 1, 2, 3이 저장된다.
2. split(" ") 사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
String [] arr = s.split(" ");
int m = Integer.parseInt(arr[0]);
int n = Integer.parseInt(arr[1]);
int k = Integer.parseInt(arr[2]);
일단 문자열 형태로 입력받은 후 split을 통해 잘라서 각각 저장해주는 방법도 있다.
System.out.println() / BufferedWriter
위의 Scanner / BufferedReader와 똑같다. 입력이냐 출력이냐의 차이일 뿐
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for(int i=0; i<a; i++) {
for(int j=0; j<b; j++) {
for(int k=0; k<c; k++) {
bw.write(i+j+k);
}
}
}
bw.flush(); //남아있는 데이터 모두 출력
bw.close(); //마지막으로 끝
반응형
'Language > Java' 카테고리의 다른 글
[Java] 코드 실행 시간 구하기 (시간 측정) (2) | 2022.12.02 |
---|---|
[Java] 힙(Heap) (0) | 2022.11.22 |
[JAVA] HashMap 사용 (0) | 2022.08.03 |
[JAVA] 배열에서 일치하는 문자열 찾기 (0) | 2022.07.21 |
[JAVA] 날짜 계산 (날짜 더하기, 날짜 빼기) (0) | 2022.07.15 |
댓글