개발/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]
}