본문 바로가기

코딩 테스트/Lv.2

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

문제

괄호들이 문자열 s에 담겨있으며, 문자열 s를 왼쪽으로 한칸씩 이동시킬 때, 올바른 괄호들만 있는 문자열 s가 몇 개인지 구하는 문제

 

풀이 과정

  • StringBuilder() 로 문자열 회전
  • 열림 괄호는 + , 닫힘 괄호는 -로 Map에 저장 후 
  • - 값이 나왔을 때 이전 인덱스의 값과 더해 0이면 정상 괄호 0이 아니면 비정상

 

코드

class Solution {
    fun solution(s: String): Int {
        var answer: Int = 0
        val sb = StringBuilder(s)
        
        val map : Map<Char, Int> = mapOf(
            Pair('[', 1), Pair(']', -1),
            Pair('{', 2), Pair('}', -2),
            Pair('(', 3), Pair(')', -3))
        
        for(i in s.indices){
            val tmp = ArrayList<Int>()
            for(a in sb){
                if(map.get(a)!! > 0) tmp.add(map.get(a)!!)
                else{
                    if(tmp.size == 0) {
                        tmp.add(map.get(a)!!)
                        break
                    }
                    if(tmp[tmp.size-1] + map.get(a)!! == 0) tmp.removeAt(tmp.size-1)
                    else break
                }
            }
            
            if(tmp.size == 0) answer ++
            
            //왼쪽으로 회전
            sb.apply{
                append(sb[0])
                deleteAt(0)
            }
        }
        
        return answer
    }
}