코딩테스트/프로그래머스

[프로그래머스] Lv.0 수열과 구간 쿼리 3(Java)

선SEON 2023. 11. 29. 15:41

1. 문제

 

2. 제출 답안

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for (int[] query : queries) {
            int i = query[0];
            int j = query[1];

            // arr[i]와 arr[j]의 값을 서로 바꿈
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        return arr;
    }
}

 

원본 배열 직접 변경

3. 다른 풀이

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = Arrays.copyOf(arr, arr.length);

        for (int[] query : queries) {
            int i = query[0];
            int j = query[1];

            int temp = answer[i];
            answer[i] = answer[j];
            answer[j] = temp;
        }

        return answer;
    }
}

 

<배열의 복사본을 생성하는 이유>

원래 배열(arr)을 변경하지 않고, 새로운 배열(answer)을 만들어서 작업하기 위해서이다.

Java에서 배열은 참조 타입이기 때문에, 배열 변수를 복사하면 참조만 복사되어 두 변수가 같은 배열을 참조하게 된다.

-> 새로운 배열을 만들어서 작업하려면 Arrays.copyOf나 직접 배열을 순회하면서 복사하는 등의 방법을 사용.