문제
당신은 특정한 카드를 정렬해야 합니다. 각 카드는 숫자와 문자를 포함할 수 있습니다. 입력으로 주어진 카드들을 다음 규칙에 따라 정렬하세요:
- 문자 카드는 숫자 카드보다 먼저 나와야 합니다.
- 문자 카드의 경우, 알파벳 순으로 정렬합니다.
- 숫자 카드의 경우, 오름차순으로 정렬합니다.
예를 들어, 주어진 카드가 ["A", "3", "B", "1", "2"]
라면, 결과는 ["A", "B", "1", "2", "3"]
입니다.
풀이 과정
1단계: 문제 이해하기
이 문제는 카드를 문자 카드와 숫자 카드로 분리하여 정렬하는 과정입니다. 문제의 요구에 따라 특정한 규칙을 적용해야 합니다.
2단계: 자료구조 선택하기
Swift에서는 배열(Array)을 사용하여 카드를 저장하고 조작할 수 있습니다. 입력으로 주어진 배열을 기반으로 작업을 진행합니다.
3단계: 정렬 기준 설정하기
문자 카드와 숫자 카드를 분리한 뒤, 각각에 대해 정렬하는 방법을 정의해야 합니다. 이를 통해 최종적인 결과를 얻을 수 있습니다.
4단계: Swift 코드 작성
import Foundation
func sortCards(cards: [String]) -> [String] {
var letters: [String] = []
var numbers: [Int] = []
// 카드 분리
for card in cards {
if let number = Int(card) {
numbers.append(number)
} else {
letters.append(card)
}
}
// 정렬
letters.sort()
numbers.sort()
// 결과 통합
let sortedNumbers = numbers.map { String($0) }
return letters + sortedNumbers
}
// 예시
let cards = ["A", "3", "B", "1", "2"]
let sortedCards = sortCards(cards: cards)
print(sortedCards) // ["A", "B", "1", "2", "3"]
5단계: 시간 복잡도 분석
이 알고리즘의 시간 복잡도는 O(n log n)입니다. 이는 문자열 정렬과 숫자 정렬 모두 O(n log n)의 시간 복잡도를 가지기 때문입니다. 카드의 개수를 n이라고 했을 때, 최악의 경우 n개의 카드가 주어질 수 있으므로 충분한 성능을 보일 것입니다.
6단계: 결론
이 문제를 통해 Swift의 기본적인 배열 처리와 정렬 기법을 익힐 수 있습니다. 더불어, 문자열과 숫자를 좌우로 처리하는 방법을 이해하는 것이 중요합니다. 이와 같은 문제를 자주 연습하면 코딩 인터뷰에서 도움이 될 것입니다.