본문 바로가기
프로그래머스 Algorithm

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

by Echung 2024. 1. 3.

thumbnail

안녕하세요. 이번에는 프로그래머스 괄호 회전하기 문제를 풀어보려고 합니다. 

Problem


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

 

프로그래머스

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

programmers.co.kr

Solution


import java.util.Stack

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

        for(i in s.indices) {
            var stack = Stack<Char>()
            var checkPoint: Boolean = true
            val temp = (s + s).slice(i until s.length + i).toMutableList()

            for(j in temp.indices) { 
                val char = temp[j]
                if(char == '(' || char == '[' || char == '{') {
                    stack.push(char)
                } else {
                    if(!isRight(char, stack)) {
                        checkPoint = false
                        break
                    }
                }
            }

            if(stack.isEmpty() && checkPoint) {
                answer++
            }
        }

        return answer
    }

    fun isRight(char: Char, stack: Stack<Char>): Boolean {        
        if(stack.isEmpty()) {
            return false    
        }

        if(char == ')') {
            if(stack.peek() == '(') {
                stack.pop()    
            } else {
                return false
            }
        } else if(char == ']') {
            if(stack.peek() == '[') {
                stack.pop()
            } else {
                return false
            }
        } else if(char == '}') {
            if(stack.peek() == '{') {
                stack.pop()
            } else {
                return false
            }
        }

        return true
    }
}

 이번 문제는 Stack을 활용해서 문제를 접근해 보았습니다. 이번 문제는 백준에서 풀었던 괄호 문제가 있어서 쉽게 풀 수 있었습니다. 백준 문제를 참고하려면 아래의 링크를 참고하세요.

https://echung93.tistory.com/entry/CLASS-2-9012-%EA%B4%84%ED%98%B8-JAVA

 

[백준] CLASS2 9012 괄호 - JAVA [자바]

안녕하세요. 이번에는 백준 9012 괄호 문제를 풀어보려고 합니다. https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어

echung93.tistory.com

하지만 여기서 중요한 거는 '[', '{', '(' 이 3가지의 괄호가 나오기 때문에 이 3가지를 판단해 주는 isRight 함수를 추가해 줬습니다.

 

1. 다른 사람 코드

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

        for(i in 0..s.length - 1) {
            var tmp = s.substring(i) + s.substring(0, i)
            if(isRight(tmp)) {
                answer += 1
            }
        }
        
        return answer
    }

    fun isRight(str: String): Boolean {
        var list = mutableListOf<Char>()
        var endCh = charArrayOf(']', ')', '}')

        for(ch in str) {
            if(endCh.contains(ch)) {
                if(list.isEmpty()) {
                    return false
                }
                
                var tmp=list.removeAt(list.size - 1)
                when(ch) {
                    ']' -> if(tmp != '[') return false
                    ')' -> if(tmp != '(') return false
                    '}' -> if(tmp != '{') return false
                }
            } else {
                list.add(ch)
            }
        }
        
        return list.size == 0
    }
}

Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형