정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
1 ≤ arr의 길이 ≤ 1,000
0 ≤ arr의 원소 ≤ 1,000,000
1 ≤ queries의 길이 ≤ 1,000
0 ≤ i < j < arr의 길이
arr queries result
[0, 1, 2, 3, 4] [[0, 3],[1, 2],[1, 4]] [3, 4, 1, 0, 2]
입출력 예 #1
각 쿼리에 따라 arr가 다음과 같이 변합니다.
arr
[0, 1, 2, 3, 4]
[3, 1, 2, 0, 4]
[3, 2, 1, 0, 4]
[3, 4, 1, 0, 2]
따라서 [3, 4, 1, 0, 2]를 return 합니다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// arr_len은 배열 arr의 길이입니다.
// queries_rows는 2차원 배열 queries의 행 길이, queries_cols는 2차원 배열 queries의 열 길이입니다.
int *solution(int arr[], size_t arr_len, int **queries, size_t queries_rows, size_t queries_cols) {
for (int i = 0; i < queries_rows; i++) {
int a = queries[i][0];
int b = queries[i][1];
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
return arr;
}
배열 arr과 이차원 배열 queries를 입력으로 받아서, queries에 있는 쿼리들을 수행하여 arr의 원소들을 교환한 뒤, 최종적으로 arr을 반환합니다.
여기서 queries는 각각 [a, b] 형태로 주어지며, 이는 arr의 인덱스 a와 b에 있는 원소를 서로 교환하라는 의미입니다.
따라서 코드에서는 queries에 있는 각각의 쿼리를 수행하기 위해 queries_rows 만큼 반복문을 돌면서, 현재 쿼리에서 a와 b에 해당하는 인덱스를 가져옵니다. 그리고 temp라는 임시 변수에 arr[a]의 값을 저장하고, arr[a]에 arr[b]의 값을 할당하고, arr[b]에 temp의 값을 할당하여 두 원소를 서로 교환합니다.
쿼리를 모두 수행한 뒤, 최종적으로 arr을 반환하면 됩니다. 이때 arr은 동적 할당을 통해 메모리를 할당받은 배열이므로, 반환할 때도 메모리를 해제하거나 재활용하지 않도록 주의해야 합니다.