코딩테스트(코틀린) 기초부터 연습

프로그래머스 괄호 회전하기

리워크 2021. 4. 20. 16:58
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 정리 잘된 다른사람의 블로그

pridiot.tistory.com/68

 

[Java] 스택(Stack)과 큐(Queue)

공부했던 자료 정리하는 용도입니다. 재배포, 수정하지 마세요. 스택(Stack)과 큐(Queue)  Queue 는 먼저 들어간 데이터를 먼저 꺼내는 FIFO구조로 되어있고,  Stack 은 LIFO구조로 되어있어서 마지막에

pridiot.tistory.com