티스토리 뷰

코딩테스트

Lv.0 swift 수열과 구간 쿼리 3

알롱도담쓰 2024. 3. 28. 10:36

문제 설명

정수 배열 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의 길이

 

내 답안

import Foundation

func solution(_ arr:[Int], _ queries:[[Int]]) -> [Int] {

    var result = arr
    
    for query in queries {
        let temp = result[query[0]]
        result[query[0]] = result[query[1]]
        result[query[1]] = temp
    }
    
    return result
}

 

접근 방법

temp 값을 주고 배열[0]과 배열[1]을 바꾼다

 

다른 풀이

func solution(_ arr: [Int], _ queries: [[Int]]) -> [Int] {
    return queries.reduce(into: arr) { result, q in
        result.swapAt(q[0], q[1])
    }
}

 

알게 된 것

reduce(into:)

 

정리

https://codingbackup.tistory.com/241

 

고차함수 : reduce(_:, _:) / reduce(into:)

reduce(_:, _:) 시퀀스의 모든 요소들을 통합하여 단일값을 생성 func reduce( _ initialResult: Result, _ nextPartialResult: (Result, Self.Element) throws -> Result ) rethrows -> Result 매개변수 initialResult: 초기 누적 값으로 사

codingbackup.tistory.com

 

'코딩테스트' 카테고리의 다른 글

Lv.0 swift 1로 만들기  (0) 2024.03.29
Lv.0 swift 문자열 겹쳐쓰기  (1) 2024.03.27
Lv.0 swift 분수의 덧셈  (0) 2024.03.27
Lv.0 swift 배열 만들기 5  (0) 2024.03.25
Lv.0 swift 날짜 비교하기  (0) 2024.03.25
최근에 올라온 글