괄호 스택과 와일드카드를 따로관리하고,스택에는 현재인덱스를 투입하고 와카리스트에도 인덱스로 관리
만약 스택이 비었는데 인출이 뜨면 와카확인후 와카제거하고,스택끝났는데 남은거있으면 와카확인해서 하나씩 제거후 비면 true 아니면 false
정답
import java.util.Stack
class Solution {
fun checkValidString(s: String): Boolean {
val stack=Stack<Int>()
val wildCardList= mutableListOf<Int>()
for ((iIndex,iValue) in s.withIndex()){
if (iValue=='*'){
wildCardList.add(iIndex)
}
if (iValue=='('){
stack.push(iIndex)
}
if (iValue==')'){
if (stack.isNotEmpty()){
stack.pop()
continue
}
if (wildCardList.isNotEmpty()){
wildCardList.removeLast()
}else{
return false
}
}
}
if(stack.empty()){
return true
}
while (stack.isNotEmpty()){
if (wildCardList.isEmpty()){
return false
}
var tempInt=-1
for (j in wildCardList){
if (stack.peek()<j){
stack.pop()
tempInt=j
break
}
}
if (tempInt==-1){
return false
}
wildCardList.remove(tempInt)
}
return true
}
}
'알고리즘' 카테고리의 다른 글
릿코드 2073. Time Needed to Buy Tickets 코틀린 (0) | 2024.04.09 |
---|---|
릿코드 1700. Number of Students Unable to Eat Lunch 코틀린 (0) | 2024.04.08 |
릿코드 1249. Minimum Remove to Make Valid Parentheses 코틀린 (0) | 2024.04.06 |
릿코드 1544. Make The String Great 코틀린 (0) | 2024.04.05 |
릿코드 79. Word Search 코틀린 (0) | 2024.04.03 |