ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] 이준 우선 순위 큐 프로그래머스 코딩테스트
    개발/Swift 2022. 1. 13. 14:09

    어떻게 풀어야 할지 고민도 없이 문제를 읽고 바로 해결법을 찾았던 문제였다.

    들어오는 값은 [”명령어 값”] 이므로 “ “ 을 기준으로 나눠 배열로 바꾼다.

    그러면 [”명령어”,”값”] 인 형태가 될것이고 조건문을 통해 명령어가 “I”면 값이 들어있는 배열에 값을 추가하고

    그렇지 않으면 삭제이므로 값을 보고 “1” 이면 값이 들어있는 배열을 정렬후 가장 큰값을 제거하고

    “1” 이 아니면 작은 값을 제거하면된다.

     

    이후에 값이 들어있는 배열이 비어있는경우 [0,0]을 리턴

    값이 있으면 최대 최소값을 리턴해주면 된다.

     

    var valueArray = [Int]()
    for index in 0..<operations.count{
        let value = operations[index].split(separator: " ")
    }
    
    

    value 는 이제 명령어와 값으로 나뉜 배열이 될것이다.

    if(value[0] == "I"){
        valueArray.append(Int(value[1])!)
    }else{
        //D
        if(!valueArray.isEmpty){
            if(value[1] == "1"){
                valueArray.sort(by: <)
                valueArray.popLast()
            }else{
                valueArray.sort(by: >)
                valueArray.popLast()
            }
        }
    }
    

    I 인경우 값을 배열에 넣어줬다. 나중에 어차피 Int 타입으로 리턴을해야하고 정렬을 해야하니

    Int 로 파싱하여 넣어준다.

     

    else문은 삭제할 경우이다. 1인경우 최대값이므로 오름차순 정렬후 마지막을 빼주고

    반대는 반대로 하면된다.

    if(valueArray.isEmpty){
            return [0,0]
        }
        valueArray.sort(by: <)
        let min = valueArray[0]
        let max = valueArray.popLast()
        
        return [max!,min]
    

    이제 리턴은 두가지 경우로 나뉜다 valueArray 가 비어있으면 [0.0]을

    아니면 최대값 최소값을 넣은 배열을 리턴해주면 된다.

     

    전체 코드

    func solution(_ operations:[String]) -> [Int] {
        var valueArray = [Int]()
        for index in 0..<operations.count{
            let value = operations[index].split(separator: " ")
            if(value[0] == "I"){
                valueArray.append(Int(value[1])!)
            }else{
                if(!valueArray.isEmpty){
                    if(value[1] == "1"){
                        valueArray.sort(by: <)
                        valueArray.popLast()
                    }else{
                        valueArray.sort(by: >)
                        valueArray.popLast()
                    }
                }
            }
        }
        
        if(valueArray.isEmpty){
            return [0,0]
        }
        valueArray.sort(by: <)
        let min = valueArray[0]
        let max = valueArray.popLast()
        
        return [max!,min]
    }
    

    댓글

Designed by Tistory.