코딩테스트(코틀린) 기초부터 연습
프로그래머스 괄호변환
리워크
2021. 4. 16. 15:08
class Solution {
fun solution(p: String): String {
var answer = ""
answer=solute(p)
println(answer)
return answer
}
/**true면 올바른 문자열*/
fun checkIsPerfect(s: String): Boolean {
var checkNum = 0
for (i in s) {
when (i) {
'(' -> {
checkNum++
}
else -> {
checkNum--
}
}
if (checkNum < 0) return false
}
return true
}
fun divideChar(s: String): Pair<String,String> {
var checkNum = 0
var position = 0
for (i in s) {
position++
when (i) {
'(' -> {
checkNum++
}
else -> {
checkNum--
}
}
if (checkNum == 0) break
}
val u = s.slice(0 until position)
val v = s.slice(position until s.length)
return u to v
}
fun solute(s:String) : String{
if(s =="") return ""
val divided = divideChar(s)
if (checkIsPerfect(divided.first)){ // u가 완벽함
return divided.first + solute(divided.second)
}else{//완벽하지 못함
val newU = String(divided.first.subSequence(1,divided.first.lastIndex).map {
when(it){
'('->{
')'
}else->{
'('
}
}
}.toCharArray())
return "("+solute(divided.second)+")" +newU
}
}
}
괄호안이 완벽한 문자열인지 확인하고 재귀함수를 통해서 이어줌