[Swift] [66일차] 1409_LEET 순열 조작하기

·2025년 2월 11일
0

SwiftAlgorithm

목록 보기
69/105
post-thumbnail

1409. Queries on a Permutation With Key


문제 설명

  1. 숫자 순열이 주어진다.
  2. 순서0번부터 차례대로 주어진 queries 배열의 인덱스에 해당하는 값을 찾은뒤 정답배열에 넣는다.
  3. 방금 찾은 값을 배열의 맨 앞으로 땡겨온다.
  4. 바뀐 배열을 계쏙 유지하면서 변경된 순서로 계속 진행

문제 풀이

  1. 보면은 일단 특정값의 인덱스를 어떻게 찾을 것인가?는
let findIdx = changableArr.firstIndex(of: item)!

이렇게 firstIndex(of:element)로 가능하다. index(of:)는 이제 사장되어서 firstIndex를 사용할 것임을 swift측에서도 권장하고 있다.

  1. 배열의 해당 값을 없애주고 맨 앞으로 땡겨오는 로직은 어떻게 수행할 것인가?
changableArr.remove(at: findIdx)
changableArr.insert(item, at: 0)

remove를 해주고 insert로 위치 0에 가져오면 된다.

최종코드

class Solution {
    func processQueries(_ queries: [Int], _ m: Int) -> [Int] {
        var changableArr = Array(1 ... m)

        var answer = [Int]()

        for item in queries {
            let findIdx = changableArr.firstIndex(of: item)!
            answer.append(findIdx)
            changableArr.remove(at: findIdx)
            changableArr.insert(item, at: 0)
        }
        return answer
    }
}


타인의 코드

class Solution {
    func processQueries(_ queries: [Int], _ m: Int) -> [Int] {
        var permutation = Array(1...m)
        var result = [Int]()

        for query in queries {
            guard let index = permutation.firstIndex(where: { $0 == query }) else { continue }
            permutation.remove(at: index)
            permutation.insert(query, at: 0)
            result.append(index)
        }

        return result
    }
}

이분은 보시다시피 firstIndex(of:) 대신에 firstIndex(where:)로 조건을 활용해준 것을 볼 수 있다.
queries의 반복문 원소와 같은 값을 한번에 찾아주는 것이고, 이후 행동은 엄청나게 유사했다.
guard let으로 unwrapping해주는게 더 깔끔한 코드인 것 같기도!

profile
기억보단 기록을

0개의 댓글