본문 바로가기

알고리즘/프로그래머스 문제풀이

프로그래머스 lv2 괄호 회전하기(kotlin)

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

프로그래머스

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

programmers.co.kr

문제 접근

  • 문자열을 회전시켜가며 괄호가 올바르게 되어있는지를 확인하는 문제
  • 괄호가 올바르게 되어있는지를 확인하는 함수를 따로 만들어서 처리하였다.
  • 다만 반례가 응근 많이나와서 반례가 안나올때까지 조건을 하나하나 추가해주었다....

 

 

정답코드

class Solution {
    var list = mutableListOf<Char>()
    
    fun solution(s: String): Int {
        var answer: Int = 0
        var s2 = s //회전시킬 문자열
        var sNum = s2.length // 회전시킬 횟수
        
        while(sNum-- > 0){
          var temp = ""
         //조건에 맞는지 확인
        if(check(s2)){
            answer++
        }
        
        //문자열 회전시키기
        for(i in 1 until s.length){
            temp += s2[i].toString()
        }
        temp += s2[0].toString()
        s2 = temp
        }               
        return answer
    }
    
    //올바른 문자열인지 판단해주는 함수
    fun check(s:String) : Boolean{
        //마지막이 여는 괄호일경우 올바를 수 없음
         if(s[s.length-1] == '(' || s[s.length-1] == '{' || s[s.length-1] == '[')
            {
             return false
            }
            //괄호의 길이가 홀수일 경우 올바를 수 없음
            if(s.length %2 != 0){
                return false
            }
            
        for(i in 0 until s.length){
          
            if(s[i] == '(' || s[i] == '{' || s[i] == '[')
            {
               list.add(s[i]) 
            }
            else if(s[i] == ')'){
                if(list.contains('(')&& list.last() == '('){
                                       list.removeLast()

                    
                }
                else{
                    return false
                }
            }
            else if(s[i] == ']'){
                if(list.contains('[')&& list.last() == '['){
                                        list.removeLast()

                }
                else{
                    return false
                }
            }
            else if(s[i] == '}'){
                if(list.contains('{')&& list.last() == '{'){
                    list.removeLast()
                }
                else{
                    return false
                }
            }
        }
        
        return true
    }
}