Post

[이것이 코딩 테스트다 with Python] 두 배열의 원소 교체(Java)

Goal

“이것이 코딩 테스트다 with Python” 교재의 문제를 분석하고 코드와 함께 이해해보기 위한 글입니다.

문제 분석

시간복잡도 O(NlogN)을 지켜야 하므로 주어지는 두 배열을 Arrays.sort()를 이용해 정렬합니다. 다만, 두 번째 배열은 내림차순으로 정렬할 것이기 때문에 래핑클래스로 선언합니다.

마지막으로, 두 배열의 원소를 교체하기 전에 크기가 더 큰 것이 맞는지 확인합니다.

코드 구현

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
public class SwapTwoArraysElem { //p182
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        int[] f = new int[n];
        Integer[] t = new Integer[n];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            f[i] = Integer.parseInt(st.nextToken());
        }
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            t[i] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(f);
        Arrays.sort(t, Collections.reverseOrder());

        for (int i = 0; i < k; i++) {
            if (f[i] < t[i]) f[i] = t[i];
        }
        int answer = 0;
        for (int i = 0; i < n; i++) {
            answer += f[i];
        }

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write(String.valueOf(answer));
        bw.close();
        br.close();
    }
}

This post is licensed under CC BY 4.0 by the author.