프로그래머스

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

내손은개발 🐾 2024. 4. 12. 21:35
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

풀이

class Solution {
    fun solution(s: String): Int {
        var anwer = 0

        for (i in 0 until s.length) {
            //순환
            val sList = s.substring(i) + s.substring(0, i)

            // 여는 괄호 시 sCheck에 추가
            val sCheck = mutableListOf<Char>()
            var isValid = true
            for (c in sList) {
                when (c) {
                    '(', '[', '{' -> sCheck.add(c)
                    ')' -> if (sCheck.isEmpty() || sCheck.removeAt(sCheck.lastIndex) != '(') {
                        isValid = false
                        break
                    }

                    ']' -> if (sCheck.isEmpty() || sCheck.removeAt(sCheck.lastIndex) != '[') {
                        isValid = false
                        break
                    }

                    '}' -> if (sCheck.isEmpty() || sCheck.removeAt(sCheck.lastIndex) != '{') {
                        isValid = false
                        break
                    }
                }
            }
            if (isValid && sCheck.isEmpty()) anwer++
        }
        return anwer
    }
}

한 번에 풀지는 못했다. 질문하기에서 힌트를 얻고 문제를 풀었다.

sCheck를 사용해서 여는 괄호가 나오면 추가하고 
닫는 괄호가 나올 때 해당하는 짝을 제거하는 형식으로 문제를 풀었다.