#029 수열과 구간 쿼리 3

Hyejin Kim·2023년 5월 6일
0

문제

정수 배열 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은 동적 할당을 통해 메모리를 할당받은 배열이므로, 반환할 때도 메모리를 해제하거나 재활용하지 않도록 주의해야 합니다.

문제 출처

코딩테스트

profile
Hello. I am a developer who is still developing.

0개의 댓글