스위프트 코딩테스트 강좌, 내림차순으로 자릿수 정렬하기

이 글에서는 스위프트를 이용하여 특정 문제를 해결하는 방법에 대해 알아보겠습니다. 주제는 내림차순으로 자릿수 정렬하기 입니다. 이 문제를 통해 문자열 처리, 정렬 알고리즘, 그리고 스위프트의 자료형 다루기 연습을 할 수 있습니다.

문제 설명

주어진 정수 배열이 있을 때, 각 정수를 문자열로 변환한 다음, 자릿수를 내림차순으로 정렬하여 결과를 반환하는 함수를 작성하세요. 예를 들어, 배열이 [321, 123, 456]이라면, 각 정수를 문자열로 변환하여 ["321", "123", "456"]로 만들고, 이를 내림차순으로 정렬하여 ["321", "456", "123"]를 반환해야 합니다.

문제 예시

  • 입력: [321, 123, 456] → 출력: ["321", "456", "123"]
  • 입력: [12, 345, 7, 89] → 출력: ["89", "7", "345", "12"]
  • 입력: [10, 2, 1] → 출력: ["2", "10", "1"]

문제 접근법

이 문제를 푸는 과정은 다음과 같은 단계로 나눌 수 있습니다:

  1. 정수를 문자열로 변환합니다.
  2. 문자열을 자릿수를 기준으로 내림차순으로 정렬합니다.
  3. 정렬된 결과를 반환합니다.

1단계: 정수 배열을 문자열 배열로 변환하기

어떤 정수를 문자열로 변환하기 위해서는 스위프트의 String() 초기화를 사용할 수 있습니다. 이를 통해 배열 내 모든 정수를 문자열로 변환합니다. 이러한 변환은 map() 함수를 사용하여 쉽게 수행할 수 있습니다.

2단계: 문자열을 내림차순으로 정렬하기

문자열을 정렬할 때는 sorted(by:) 메소드를 이용하여 사용자 정의 정렬 로직을 제공해야 합니다. 이때, 각 문자열의 길이를 비교하거나, 길이가 같을 경우 사전식(lexicographical)으로 비교하는 방법을 사용할 수 있습니다.

3단계: 정렬된 결과 반환하기

정렬이 완료된 문자열 배열을 결과로 반환하면 됩니다. 최종 구현은 다음과 같은 형태가 될 것입니다.

스위프트 코드 구현

func sortDigitsDescending(_ numbers: [Int]) -> [String] {
        // 1단계: 정수를 문자열로 변환
        let stringNumbers = numbers.map { String($0) }
        
        // 2단계: 문자열을 내림차순으로 정렬 (자릿수 우선)
        let sortedNumbers = stringNumbers.sorted { 
            (lhs, rhs) in
            if lhs.count != rhs.count {
                return lhs.count > rhs.count // 자릿수 비교
            } else {
                return lhs > rhs // 자릿수가 같을 경우 값 비교
            }
        }
        
        // 3단계: 정렬된 결과 반환
        return sortedNumbers
    }

코드 설명

위의 스위프트 함수는 다음과 같은 방식으로 작동합니다:

  • numbers.map { String($0) }: 주어진 정수 배열의 각 원소를 문자열로 변환합니다.
  • sorted { ... }: 사용자 정의 정렬 로직을 적용하여 내림차순으로 정렬합니다. 자릿수가 다르다면 자릿수를 우선하여 비교하고, 같다면 문자열의 값을 비교합니다.
  • 정렬된 문자열 배열을 반환하여 결과를 출력합니다.

테스트 케이스

함수가 제대로 작동하는지 확인하기 위해 몇 가지 테스트 케이스를 실행해 볼 수 있습니다. 아래는 해당 함수를 활용한 몇 가지 테스트 코드 예시입니다.

let testCase1 = [321, 123, 456]
let result1 = sortDigitsDescending(testCase1)
print(result1) // ["321", "456", "123"]

let testCase2 = [12, 345, 7, 89]
let result2 = sortDigitsDescending(testCase2)
print(result2) // ["89", "7", "345", "12"]

let testCase3 = [10, 2, 1]
let result3 = sortDigitsDescending(testCase3)
print(result3) // ["2", "10", "1"]

결론

이번 글에서는 스위프트로 정수를 문자열로 변환한 후 자릿수를 기준으로 내림차순으로 정렬하는 문제를 다뤄보았습니다. 문자열 처리 및 정렬 알고리즘에 대한 이해를 높이는 데 유용한 연습이었습니다. 이와 같은 문제들은 코딩 테스트에서 자주 출제되며 실전에서 유용하게 활용될 수 있습니다.

코드 구현 과정을 통해 스위프트의 다양한 기능을 활용할 수 있으며, 문제 해결 능력을 향상하는 데 큰 도움이 되기를 바랍니다. 다음 강좌에서도 더욱 흥미로운 문제를 다루어 보겠습니다!