안녕하세요! 오늘은 스위프트 코딩테스트에서 자주 출제되는 문제 중 하나인 ‘빌딩 순서 구하기’에 대해 알아보겠습니다. 이 문제는 특정 조건에 따라 빌딩을 세울 순서를 찾는 과정을 통해 알고리즘의 기초를 다질 수 있는 좋은 기회가 될 것입니다.
문제 정의
주어진 빌딩들의 정보가 있을 때, 각 빌딩을 세울 수 있는 가능한 순서를 반환하는 문제입니다. 빌딩은 특정 조건을 만족해야 하며, 그 조건은 다음과 같습니다:
- 각 빌딩은 고유한 높이를 가지고 있습니다.
- 높이가 높은 빌딩이 먼저 세워지면, 그 높이보다 높은 빌딩은 그 뒤에 세워져야 합니다.
- 빌딩의 순서는 높이를 기준으로 내림차순으로 정렬되어야 합니다.
예를 들어, 높이가 [5, 3, 4, 1]인 빌딩들이 있다면, 가능한 빌딩 순서는 [5, 4, 3, 1]이 될 것이며, 빌딩 5가 가장 먼저 세워질 것입니다.
입력 및 출력
입력
빌딩의 높이를 담고 있는 정수 배열 heights가 주어집니다.
출력
높이 순서에 따라 세울 수 있는 빌딩의 순서를 배열의 형태로 반환합니다.
문제 해결 접근 방법
이 문제를 해결하기 위해, 아래와 같은 과정을 따릅니다:
- 주어진 빌딩의 높이 배열을 내림차순으로 정렬합니다.
- 정렬된 배열을 순회하며 결과 배열에 값을 추가합니다.
- 결과 배열을 반환합니다.
예제
예를 들어, 입력 배열이 [5, 3, 4, 1]
인 경우, 정렬 후 결과는 다음과 같습니다:
입력: [5, 3, 4, 1]
출력: [5, 4, 3, 1]
스위프트 코드 구현
이제 위의 접근 방식을 스위프트로 구현해 보겠습니다.
func buildingOrder(heights: [Int]) -> [Int] {
return heights.sorted(by: >)
}
// Example usage
let heights = [5, 3, 4, 1]
let orderedBuildings = buildingOrder(heights: heights)
print(orderedBuildings) // Output: [5, 4, 3, 1]
위 코드는 주어진 heights 배열을 내림차순으로 정렬하는 간단한 함수입니다. sorted(by: >)
를 사용해 배열을 정렬하고, 정렬된 결과를 반환합니다.
시간 복잡도 분석
이 알고리즘의 시간 복잡도는 배열을 정렬하는 데 사용되는 시간 복잡도와 동일합니다. 즉, O(n log n)입니다. 여기서 n은 빌딩의 수입니다. 이 문제는 정렬을 기반으로 하고 있으므로 입력 크기가 클수록 시간이 증가하지만, 효율적인 방법이라고 할 수 있습니다.
결론
오늘은 스위프트로 빌딩을 세울 순서를 구하는 문제에 대해 알아보았습니다. 이 문제를 통해 알고리즘의 기본 개념과 정렬에 대한 이해를 높일 수 있었기를 바랍니다. 앞으로 더 많은 알고리즘 문제를 통해 실력을 쌓아보시길 바랍니다!