[Swift] [4일차] 최솟값 만들기

·2024년 12월 10일
0

SwiftAlgorithm

목록 보기
6/105
post-thumbnail

Programmers - 최솟값 만들기

 func solution(_ A: [Int], _ B: [Int]) -> Int {
        var ans = 0
        var A = A
        var B = B
//        A는 작은순 , B는 큰순 sort
        A.sort(by: <)
        B.sort(by: >)

        for (idx, item) in A.enumerated() {
            print("item : \(item)")
            print("idx : \(idx)")
            ans += A[idx] * B[idx]
        }
        return ans
    }

일반적인 그냥 sort()를 해줬더니 오름차순으로
sort 활용해보면서 어떻게 찍히는지 확인했는데..

다음과 같이 끔찍한 결과값이 나왔다. 일단 sort()로 별다른 인자값을 넣지 않는다면, 오름차순으로 정렬이 수행되는데, 이때에 대해서 내림차순으로 해주기위해서 sort 이후 reverse를 통해 뒤집어주는 작업을 수행했는데, 불필요한 과정이 포함되는 것 같아서 좀 찾아보니 다음과 같이 by파라미터를 활용해서 엄청 간결하게 정렬을 해줄 수 있었다.

A.sort(by: <)
B.sort(by: >)

이렇게 <, > 비교 연산자를 통해서 내림차순으로 해주세요~ 오름차순으로 해주세요~를 요청할 수 있는 것이다.

공식문서 예시

단순히 숫자뿐아니라 사전순 정렬도 가능하다

var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort(by: >)
print(students) // Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"

추가활용 방안

swift역시 자바스크립트 처럼 sort를 원하는 기준으로 정렬 할 수 있는 기능 역시 제공한다. (클로저를 활용한 커스텀 비교)

1. 문자열 길이를 기준으로 정렬

var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort { $0.count < $1.count } // 문자열 길이 기준 오름차순
print(students) // "["Kofi", "Peter", "Abena", "Kweku", "Akosua"]"

2. 절댓값 기준 오름차순 (이렇게 변환해서 비교도 가능)

var numbers = [3, -1, 2, -4, 5]
numbers.sort { abs($0) < abs($1) } // 절댓값 기준 오름차순
print(numbers) // Prints "[2, -1, 3, -4, 5]"

3. 특정 문자로 시작 여부로 정렬도 가능하다. ( A로 시작하면 A끼리 먼저, 그렇지 않으면 그렇지 않은 애들끼리 정렬)

var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort { $0.hasPrefix("A") && !$1.hasPrefix("A") }
print(students) // Prints "["Abena", "Akosua", "Kofi", "Peter", "Kweku"]"

이런식으로 자유롭게 커스텀 설정이 가능하다는 것 한 번 더 확인할 수 있었다.

느낀점

그냥 간단한 것이겠지만 for (idx, item) in A.enumerated() 이렇게 index와 value값을 enumerated()로 가져오는 것을 활용해봤는데, 이것 외에도 더 직관적으로 할 수 있으려면 ,

 for (aItem, bItem) in zip(sortedA, sortedB) {
        answer += aItem * bItem
    }

아무래도 두개의 배열을 활용하고 있다보니 zip이 더 적합한 활용방안 인 것 같다. 이거는 굳이 인덱스로 접근하지 않더라도 원소 하나씩 추출되기 때문에 더 가독성있게 활용이 가능하다 !

profile
기억보단 기록을

0개의 댓글