iOS 관련 공부

LeetCode - Height Checker 에서 사용한 함수 정리

가애야 2025. 3. 28. 11:59

sort 함수

sort 함수는 배열을 정렬하며, 배열 자체를 수정해서 원본 배열의 순서가 변경된다.

var numbers = [5, 2, 9, 1, 5, 6]
// 오름차순 정렬
numbers.sort()
// 내림차순 정렬
numbers.sort { $0 > $1 }
print(numbers) // 출력: [9, 6, 5, 5, 2, 1]

 

 

sorted 함수

sorted 함수는 배열을 정렬한 새로운 배열을 반환해 원본 배열은 변경되지 않는다.

즉, 정렬 된 새로운 배열울 얻고 싶을 때 sorted 함수를 사용한다.

let numbers = [5, 2, 9, 1, 5, 6]
// 오름차순 정렬된 새로운 배열 반환
let ascendingArray = numbers.sorted()
// 내림차순 정렬된 새로운 배열 반환
let descendingArray = numbers.sorted { $0 > $1 }
print(ascendingArray) // 출력: [1, 2, 5, 5, 6, 9]
print(descendingArray) // 출력: [9, 6, 5, 5, 2, 1]

 

 

sort 함수와 sorted 함수는 모두 배열의 요소를 정렬하는데 사용되지만, sort 함수는 원본 배열을 변경하고

sorted 함수는 정렬된 새로운 배열을 반환하는 차이가 있다.

 

 

 

zip 함수

두 개 이상의 시퀀스를 조합하여 새로운 시퀀스를 만드는데 사용된다.

zip함수를 사용하면 여러 시퀀스들을 병렬로 순회하며 요소들을 조합할 수 있다.

 

각 요소를 튜플로 묶어 새로운 시퀀스를 생성하는데 중요한 점은 zip함수가 시퀀스 중 더 짧은 시퀀스의 길이에 맞춰

결과를 생성한다는 것이다.

 

만약 두 개의 시퀀스를 묶는데 한쪽이 더 짧으면 더 짧은 쪽에 맞춰 결과를 생성한다.

let array1 = [1, 2]
let array2 = ["a", "b", "c"]

let zippedArray = zip(array1, array2)

for (num, letter) in zippedArray {
    print("\(num) - \(letter)")
}

이 경우 출력은

1 - a
2 - b

이렇게 array1의 길이가 더 짧기 때문에, array2의 추가 요소는 무시된다.

zip함수는 swift의 Sequence 및 Collection 프로토콜을 따르는 모든 타입에서 사용할 수 있어

배열, 리스트, 세트 등 다양한 시퀀스 타입에 적용할 수 있다.

 

 

 

filter 함수

원본 컨테이너의 값을 특정 조건에 맞게 걸러서 새로운 컨테이너에 담아 변환한다.

필터 함수의 매개변수로 전달되는 함수의 리턴 타입은 Bool이다.

해당 값이 새 컨테이너에 포함될 수 있으면 true, 그렇지 않으면 false를 리턴한다.

let numbers: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8]
let evenNumbers2: [Int] = numbers.filter { (number: Int) -> Bool in
    return number % 2 == 0
}

let oddNumbers: [Int] = numbers.filter { $0 % 2 != 0 }

 

 

 

 

 

더보기

문제풀이

class Solution {
    func heightChecker(_ heights: [Int]) -> Int {
        var expected = heights.sorted()
        return zip(heights, expected).filter { $0 != $1 }.count
    }
}

// 재정렬하고 위치가 바뀐 인덱스 개수 확인
// zip으로 두개 시퀀스를 조합하고 새로운 시퀀스를 만들어 요소를 조합한 다음 서로 다른 값을 가진 값들만 filter로 걸러내 개수 카운트