import java.util.*
class Solution {
fun solution(s: String): Int {
var sq = LinkedList<Char>(s.map { it }) as Queue<Char>
var count = 0
for (i in 1..s.length) {
if (checkRight(sq)) count++
val first = sq.poll()
sq.offer(first)
}
println(count)
return count
}
fun checkRight(array: Queue<Char>): Boolean {
val aq = LinkedList(array.map { it }) as Queue<Char>
val aqs = Stack<Char>()
while (aq.isNotEmpty()) {
if (aqs.isEmpty()) {
aqs.push(aq.poll())
if (aqs.peek() == ')' || aqs.peek() == '}' || aqs.peek() == ']') {
return false
}
} else {
if (check(aqs.peek(), aq.peek())) {
aq.poll()
aqs.pop()
} else {
aqs.push(aq.poll())
}
}
}
if (aqs.isEmpty()) return true
return false
}
fun check(c1: Char, c2: Char): Boolean {
return (c1 == '(' && c2 == ')') || (c1 == '{' && c2 == '}') || (c1 == '[' && c2 == ']')
}
}
최초의 형태에서 stack에 하나씩 넘기다가 stack의 마지막과 queue의 첫번째것이 하나의 완전한 괄호가 된다면 stack에서 제거해주고 queue에서도 제거해주면서 queue가 끝날때 까지 반복함.
stack 과 queue 정리 잘된 다른사람의 블로그
'코딩테스트(코틀린) 기초부터 연습' 카테고리의 다른 글
프로그래머스 최소공배수.. (0) | 2021.04.21 |
---|---|
프로그래머스 피보나치 (0) | 2021.04.20 |
이진탐색 -효율성을 높이자 (0) | 2021.04.19 |
프로그래머스 괄호변환 (0) | 2021.04.16 |
프로그래머스 멀쩡한 사각형 (0) | 2021.04.14 |