[Level 1 / 정렬] K번째수 + Swift

sanghee·2021년 8월 2일
1

🙈코딩테스트

목록 보기
1/52
post-thumbnail

프로그래머스 문제

코딩테스트 연습 - K번째수

뻘짓

commands에서 돌 때 i == j인 경우에는 i번째 요소를 저장하고, 다른 경우에는 i부터 j까지 배열을 잘라 저장하려고 했었다.

그런데 에러가 발생하였다 🤮

i == j가 아닌 경우에 ArraySlice타입이라서 newArray에 값을 할당할 수 없다.

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    var answer: [Int] = []
    
    for command in commands {
        let i = command[0]
        let j = command[1]
        let k = command[2]
        
        var newArray: [Int] = []
        
        if i == j {
            newArray = array[i - 1]
        } else {
            newArray = array[i - 1...j - 1]
        }

조건에 따라 타입이 달라진다 😱

var newArray: [Int] = []
var newArray = ArraySlice<Int>()

순간 이건 어쩌지? 하면서 당황스러웠다. 맘이 아팠지만 결국 이중포문을 사용하여 풀어보았다.

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    var answer: [Int] = []
    
    for command in commands {
        let i = command[0]
        let j = command[1]
        let k = command[2]
        var arr: [Int] = []

        for n in array[i - 1...j - 1] {
            arr.append(n)
        }
        let sortedArr = arr.sorted()
        
        let number = sortedArr[k - 1]
        answer.append(number)
    }
    return answer
}

나의 풀이

포문을 굳이 또 쓰는 건 비효율적이고 생각이 강하게 들었다. 변수를 선언하고 값을 할당하지 말고 바로 선언하였다.

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    var answer: [Int] = []
    
    for command in commands {
        let i = command[0]
        let j = command[1]
        let k = command[2]
        
        let arr = array[i - 1...j - 1]
        let sortedArr = arr.sorted()
        
        answer.append(sortedArr[k - 1])
    }
    return answer
}

다른 사람의 풀이

항상 다른 사람의 풀이를 보면서 많이 배운다. 깔끔하게 map을 사용하여 작성할 수도 있다.

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    return commands.map({command in
        return array[(command[0] - 1)...(command[1] - 1)].sorted()[command[2] - 1]
    })
}

줄이고 줄이면 한줄로 작성할 수도 있다. 심오한 클로져의 세계 🤭

func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
    return commands.map({ array[($0[0] - 1)...($0[1] - 1)].sorted()[$0[2] - 1] })
}

깃허브 커밋 주소

GitHub - K번째수

profile
👩‍💻

0개의 댓글