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
}
- 조금 더 쉽게 코틀린 내장 메소드를 사용해 어떻게 풀 수 없을까를 생각하다가 오래 걸렸다.
- 짝이 같은 경우를 어떻게 체크할지를 고민했다. -> open의 개수가 close개수보다 작으면 아직 닫히지 않은 경우이므로 짝이 맞지 않다. 그 부분이 같으면 짝이 맞는다 할 수 있다.