👀 문제
https://www.acmicpc.net/problem/11728
👊 도전
1. 설계
- 시간 제한이 있으므로, BufferedReader와 BufferedWriter를 이용한다.
2. 구현 (성공 코드)
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
31
32
33
34
35
36
37
import java.io.*;
import java.util.*;
/**
* @author HEESOO
*
*/
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
String[] input=br.readLine().split(" "); // 첫 번째 개행 읽기
int n=Integer.parseInt(input[0]), m=Integer.parseInt(input[1]);
int size=n+m;
int[] result=new int[size];
String[] arrayA=br.readLine().split(" "); // 두 번째 줄 읽기
String[] arrayB=br.readLine().split(" "); // 세 번째 줄 읽기
int idx=0;
for(int i=0;i<n;i++) { // 배열 A 넣기
result[idx++]=Integer.parseInt(arrayA[i]);
}
for(int i=0;i<m;i++) { // 배열 B 넣기
result[idx++]=Integer.parseInt(arrayB[i]);
}
Arrays.sort(result); // 오름차순 정렬
for(int r:result) {
bw.write(String.valueOf(r)+" ");
}
bw.flush();
bw.close();
}
}
3. 결과
🤟 성공 🤟
4. 설명
- BufferedReader를 이용하여 input을 읽은 후 오름차순 정렬한다
- BufferedReader는 버퍼에 input값을 저장해두었다가, 버퍼가 가득차거나 개행 문자가 나타나면 버퍼의 내용을 한 번에 전달하므로 실행 속도가 빠르다.
- br.readLine()을 통해 input을 한 줄 읽는다.
- 첫 번째 줄은 n과 m이므로, 읽은 값을 스페이스 기준으로 나눈다. 0번째 인덱스에는 n, 1번째에는 m이다.
- 두 배열을 합쳐야 하므로 길이가 n+m인 배열을 선언한다.
- 두 번째 줄 input은 배열 A의 원소들이다. for문에서 변수 iㄹ르 통해 배열 A를 순회하고, idx변수를 밖에서 선언하여 resul 배열을 움직이며 A 값을 저장한다. B도 마찬가지이다.
- result에 A, B를 넣은 후 Arrays.sort()로 오름차순 정렬한다.
- BufferedWriter를 이용하여 출력한다
- BufferedWriter 역시 버퍼를 이용하기 때문에 성능이 좋다.
- 정렬된 result 배열의 원소를 하나씩 뽑아 bw에 적는다.
- write()는 말그대로 버퍼에 적는 것이기 때문에, flush(), close()를 통해 버퍼를 출력한 후 스트림을 닫아야 한다.
👏 해결 완료!
참고
- [Java 자바 입출력] BufferedReader/BufferedWriter https://jhnyang.tistory.com/92