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
}
}
}
괄호안이 완벽한 문자열인지 확인하고 재귀함수를 통해서 이어줌
'코딩테스트(코틀린) 기초부터 연습' 카테고리의 다른 글
프로그래머스 괄호 회전하기 (0) | 2021.04.20 |
---|---|
이진탐색 -효율성을 높이자 (0) | 2021.04.19 |
프로그래머스 멀쩡한 사각형 (0) | 2021.04.14 |
프로그래머스 배달 문제 (0) | 2021.04.14 |
프로그래머스 이분탐색 입국심사탐색 입국심사 (0) | 2021.04.13 |