Programmers

[iOS Swift] Lv.1 자연수 뒤집어 배열로 만들기

pockpock 2024. 5. 10. 23:01
출처: 프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12932
난이도: Lv.1

 

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

제한 조건

  • 0은 10,000,000,000이하인 자연수입니다

입출력 예

n return
12345 [5,4,3,2,1]

1. 첫 번째 시도 (실패)

 문제를 처음 봤을 때, 어? 버블 정렬로 1,2,3,4,5를 나타낸 다음 대충 배열 순서를 뒤바꾸는 구문을 쓰면 되지 않을까?? 싶어서 시도해봤다.

func solution( n: Int64) -> [Int] {
    // Int64 자연수를 String으로 변환하여 각 자리 숫자를 분리
    let digits = String(n).compactMap { Int(String($0)) }

    // 버블 정렬 함수
    func bubbleSort( array: inout [Int]) {
        let count = array.count
        for i in 0..<count {
            for j in 0..<count-i-1 {
                if array[j] > array[j+1] {
                    let temp = array[j]
                    array[j] = array[j+1]
                    array[j+1] = temp
                }
            }
        }
    }

    // 분리된 숫자 배열을 복사하여 정렬
    var sortedDigits = digits
    bubbleSort(&sortedDigits) // 버블 정렬 적용

    for char in sortedDigits.reversed(){
        print(char)
    }

    return sortedDigits
}

하지만.. 실패 ㅠㅠ

좋아좋아 시도는 좋았어~

 

2. 두 번째 시도 (실패)

func solution( n: Int64) -> [Int] {
    // Int64 자연수를 String으로 변환하여 각 자리 숫자를 분리
    let digits = String(n).compactMap { Int(String($0)) }

    // 버블 정렬 함수를 내림차순으로 수정
    func bubbleSortDescending( array: inout [Int]) {
        let count = array.count
        for i in 0..<count {
            for j in 0..<count-i-1 {
                if array[j] < array[j+1] { // 부등호 방향을 변경하여 내림차순 정렬
                    let temp = array[j]
                    array[j] = array[j+1]
                    array[j+1] = temp
                }
            }
        }
    }

    // 분리된 숫자 배열을 복사하여 내림차순으로 정렬
    var sortedDigits = digits
    bubbleSortDescending(&sortedDigits) // 내림차순 정렬 적용

    return sortedDigits
}

아....... 뭔가 조금 더 하면 될 것 같은데 뭐가 문제일까 ㅠㅠㅠ

 

3. 세 번째 시도(실패)

let inputStr = "12345"

// 문자열을 문자 배열로 변환 후 각 문자를 Int64로 변환하여 숫자 배열 생성
let resultArray = inputStr.compactMap { Int64(String($0)) }

print(resultArray)  // [1, 2, 3, 4, 5]
error: value of type 'Int64' has no member 'compactMap'

이때 부터는 아까 버블정렬은 잊고 새로운 마음으로 다시 짯던 것 같다.

구글링을 살짝 해 봤는데 compactMap을 쓰면 뭔가 될 것 같아서 끄적여봤다. 하지만 어림없죠?

 

4. 네 번째 시도 (성공)

func solution(_ n: Int64) -> [Int] {
    var arr = Array(String(n))  // 숫자를 문자열로 변환 후 배열로 만듦
    arr.reverse()  // 배열을 역순으로 뒤집음
    
    var result = [Int]()  // 결과를 저장할 배열
    
    for char in arr {
        if let digit = Int(String(char)) {
            result.append(digit)  // 문자를 숫자로 변환하여 배열에 추가
        }
    }
    
    return result
}

 모든걸 내려놓고 처음으로 돌아갔다. 배열에 차근차근 넣어보고, 구글링을 통해 reverse라는 기능을 알아내고, 형 변환 까지. 결과창이 파란색으로 도배될 때 짜릿했다. 후후