1409. Queries on a Permutation With Key
문제 설명
- 숫자 순열이 주어진다.
- 순서0번부터 차례대로 주어진 queries 배열의 인덱스에 해당하는 값을 찾은뒤 정답배열에 넣는다.
- 방금 찾은 값을 배열의 맨 앞으로 땡겨온다.
- 바뀐 배열을 계쏙 유지하면서 변경된 순서로 계속 진행
문제 풀이
- 보면은 일단 특정값의 인덱스를 어떻게 찾을 것인가?는
let findIdx = changableArr.firstIndex(of: item)!
이렇게
firstIndex(of:element)
로 가능하다.index(of:)
는 이제 사장되어서 firstIndex를 사용할 것임을 swift측에서도 권장하고 있다.
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해주는게 더 깔끔한 코드인 것 같기도!