Swift에도 Algorithm이 있다는 거 아셨나요?

som·2024년 2월 8일
0

SwiftAnatomy

목록 보기
9/9

이번에 포스팅할 주제를 찾으려고 swift standard library를 뒤져보고 있었는데요. 세상에 Algorithm 문서가 있길래, 이게 뭐지? 하고 바로 공부하게 되었습니다.

저도 코테 준비하느라고 알고리즘 공부하고 있었는데, 너무 흥미로운 주제였습니다. 저한테는 완전 새로운 주제는 아니었어요. 기존에 알고 있었던 문법인데 이걸 swift에서는 알고리즘이라고 지칭하는 구나 정도로 이해하고 있습니다.

아래 내용은 swift > stdlib > public > core > Algorithm.swift을 참고하여 작성했습니다.

개념

min<T: Comparable>(_ x: T, _ y: T)

@inlinable
public func min<T: Comparable>(_ x: T, _ y: T) -> T {
  return y < x ? y : x
}

Comparable한 두 값을 비교하여 더 작은 값을 반환하는 함수입니다.

max<T: Comparable>(_ x: T, _ y: T)

@inlinable
public func min<T: Comparable>(_ x: T, _ y: T) -> T {
  return y < x ? y : x
}

Comparable한 두 값을 비교하여 더 큰 값을 반환하는 함수입니다.

저는 주로 알고리즘 문제를 풀 때 많이 사용했던 함수들이라 익숙했는데요!

let lineCount = Int(readLine()!)!
var triangle: [[Int]] = []

for _ in 0..<lineCount {
    triangle.append(readLine()!.components(separatedBy: " ").map { Int($0)! })
}

for i in 1..<lineCount {
    for j in 0..<i + 1 {
        if j == 0 {
            triangle[i][j] += triangle[i - 1][j]
        } else if j == i {
            triangle[i][j] += triangle[i - 1][j - 1]
        } else {
            triangle[i][j] += max(triangle[i - 1][j], triangle[i - 1][j - 1])
        }
    }
}

print(triangle[lineCount - 1].max()!)

이건 DP 문제를 풀면서 적용해본 사례입니다. 전반적인 코드는 이해 안 하셔도 됩니다!
우리가 봐야할 부분은 max() 함수인데, 두 종류가 있죠!
엄연히 다른 함수라 함수명이 같다고 해서 혼동하시면 안 됩니다!

첫번째로 나온 max(_: T, _: T) 함수는 두 값을 비교하여 더 큰 값을 반환하는 앞에서 공부한 내용입니다.

두번째로 나온 max() 함수는 배열에서 제일 큰 수를 반환하는 함수입니다.

@inlinable
@warn_unqualified_access
public func max() -> Element? {
    return self.max(by: <)
}

Sequence 타입에 속해있어 SequenceAlgorithms에서 더 자세한 내용 참고하실 수 있습니다.

간단정리

이번 포스팅은 제가 올렸던 글들 중 상대적으로 짧았네요!
다음 포스팅부터는 오픈소스 정리글 보다는 앱 런칭을 위주로 공부했던 내용들을 올려볼까 합니다!

Swift의 알고리즘은 min(_: T, _: T), max(_: T, _: T)로 이루어져 있습니다. 두 함수 모두 2개의 값을 비교하여 작거나 큰 수를 반환합니다. Sequencemin(), max()와 혼동하지 않도록 주의해야 합니다.

모두 새해 복 많이 받으세요~! 이번 년도도 힘차게 시작해봅시다 ㅎㅎ

profile
얼레벌레 취준 공부 중인 초보 개발자

0개의 댓글