[JAVA/백준] 11728번: 배열 합치기

👀 문제

https://www.acmicpc.net/problem/11728

👊 도전

1. 설계

  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. 설명

  1. 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()로 오름차순 정렬한다.
  2. BufferedWriter를 이용하여 출력한다
    • BufferedWriter 역시 버퍼를 이용하기 때문에 성능이 좋다.
    • 정렬된 result 배열의 원소를 하나씩 뽑아 bw에 적는다.
    • write()는 말그대로 버퍼에 적는 것이기 때문에, flush(), close()를 통해 버퍼를 출력한 후 스트림을 닫아야 한다.

👏 해결 완료!

참고