본문 바로가기

iOS 앱 개발자 프로젝트/알고리즘 코드카타

[Algorithm] 수열과 구간 쿼리 3

 

수열과 구간 쿼리 3

 

 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

이 문제는 배열이랑 쿼리가 주어지고, 각 쿼리에 대해 배열에서 두 원소를 교환해야 하는 문제야. 쉽게 말해서, 쿼리마다 교환해야 할 인덱스가 주어지면, 해당 인덱스들끼리 값을 바꿔주면 돼.

 

※  쿼리(query)는 "뭔가를 요청하는 것"인데, 이 문제에서는 배열에서 두 인덱스를 교환하라는 요청이야. 인덱스(index)는 배열에서 각 원소의 위치를 말해. 배열의 첫 번째 원소는 인덱스 0번, 두 번째 원소는 인덱스 1번 이런 식으로 번호가 매겨져 있어. 예를 들어, 배열 [10, 20, 30]에서 10은 0번, 20은 1번, 30은 2번 인덱스를 가지지.

 

 

나의 풀이 :

func solution(_ arr:[Int], _ queries:[[Int]]) -> [Int] {
    var swapTemp: Int = 0
    var array = arr
    
    queries.forEach {
        swapTemp = array[$0[0]]        // 첫 번째 인덱스 값을 swapTemp에 저장
        array[$0[0]] = array[$0[1]]   // 첫 번째 인덱스에 두 번째 인덱스 값 대입
        array[$0[1]] = swapTemp       // 두 번째 인덱스에 swapTemp 값 대입
    }
    return array
}

 

 

풀이 과정:

  1. 배열 복사: 주어진 arr 배열을 그대로 수정하지 않으려면, 먼저 arr 배열을 array라는 새로운 배열로 복사해. 그렇게 하면 원본 배열은 변하지 않고, 새로운 배열에서 값을 바꾸는 거야.
  2. 쿼리 처리: queries 배열에 있는 각 쿼리를 하나씩 처리해. 각 쿼리는 [인덱스1, 인덱스2] 형태로 두 개의 인덱스를 주는데, 이 두 인덱스에 해당하는 값을 서로 교환해주면 돼. 예를 들어 [0, 2]라면, arr[0]과 arr[2]의 값을 바꾸는 거야.
  3. 값 교환 방법: 값을 교환할 때는 swapTemp라는 임시 변수에 값을 저장해서 처리해.
    • 먼저 swapTemp = array[$0[0]]로 첫 번째 인덱스의 값을 임시 변수에 저장하고,
    • 그 다음 array[$0[0]] = array[$0[1]]로 첫 번째 인덱스에 두 번째 인덱스의 값을 넣고,
    • 마지막으로 array[$0[1]] = swapTemp로 두 번째 인덱스에 첫 번째 인덱스의 값을 넣어주면 끝!
  4. 결과 반환: 쿼리를 다 처리한 후, 변경된 배열을 return.

 

예시:

arr = [10, 20, 30, 40]이고 queries = [[0, 2], [1, 3]]일 때:

  • 첫 번째 쿼리 [0, 2]를 처리하면 배열은 [30, 20, 10, 40]
  • 두 번째 쿼리 [1, 3]을 처리하면 배열은 [30, 40, 10, 20]