[kotlin]프로그래머스 괄호변환

Heejin Ryu·2021년 7월 24일
0

Algorithm

목록 보기
12/14
post-thumbnail

 fun solution(p: String): String {
        var answer = ""
        var u = ""
        var v = ""
        if (p.isNotBlank()) {
            var left = 0
            var right = 0
            for (i in 0..p.length) {
                if (p[i].equals(')')) {
                    left += 1
                } else {
                    right += 1
                }
                if (left == right) {
                    u = p.substring(0, i+1)
                    v = p.substring(i+1)
                    break
                }
            }
            if (checkIsRight(u)) {
                answer = u + solution(v)
            } else {
                var tmp = ""

                u = u.substring(1, u.length-1)
                for (i in 0..u.length-1) {
                    if (u[i].equals('(')) {
                        tmp += ")"
                    } else {
                        tmp += "("
                    }
                }
                answer = "(" + solution(v) + ")" + tmp
            }
            return answer
        }
        return ""
    }
    fun checkIsRight(s: String): Boolean {
        var open = 0
        var close = 0
        var isRegular = false
        for (i in 0..s.length-1) {
            if (s[i].equals('(')) {
                open += 1
            } else {
                close += 1
            }
            if (open < close) {
                isRegular = false
                break
            } else {
                isRegular = true
            }
        }
        return isRegular
    }
  1. 조금 더 쉽게 코틀린 내장 메소드를 사용해 어떻게 풀 수 없을까를 생각하다가 오래 걸렸다.
  2. 짝이 같은 경우를 어떻게 체크할지를 고민했다. -> open의 개수가 close개수보다 작으면 아직 닫히지 않은 경우이므로 짝이 맞지 않다. 그 부분이 같으면 짝이 맞는다 할 수 있다.
profile
Chocolate lover🍫 & Junior Android developer🤖

0개의 댓글