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