Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 모던자바
- 자바
- Brute-force
- 백트래킹
- 프로그래머스
- 그래프
- LEVEL2
- baekjoon
- 자료구조
- lambda
- algorithm
- java
- BFS
- 네트워크
- Java8
- DP
- 스프링
- DFS
- programmers
- back-end
- 프로젝트
- TDD
- 운영체제
- backtracking
- 백준
- kotlin
- 코틀린
- OS
- 알고리즘
- Spring
Archives
- Today
- Total
요깨비's LAB
[프로그래머스, Kotlin] 괄호 변환 본문
말 그대로 아래 설명대로 구현하면 되는 문제였습니다. 따로 설명은 필요없을 것 같습니다.
import java.util.*
class Solution {
fun solution(p: String): String {
var answer = ""
answer = doAlgorithm(p)
return answer
}
fun doAlgorithm(p: String): String {
var str = ""
if (p == "")
return ""
var index = divideString(p)
var u = getU(p, index)
var v = getV(p, index)
// println("u=$u v=$v")
if(checkIsCorrectString(u)) {
str += u
str += doAlgorithm(v)
}else {
str += "("
str += doAlgorithm(v)
str += ")"
var carr = u.toList()
var index = 0
var lastIndex = carr.size
var sb = StringBuffer()
for(c in carr) {
if(index ==0 || index == lastIndex-1) {
index++
continue
}
if(c == '(')
sb.append(')')
if(c == ')')
sb.append('(')
index++
}
str += sb.toString()
}
return str
}
fun checkIsCorrectString(u: String): Boolean {
val stack = Stack<Char>()
var isCorrect = true
u.forEach {
if(it == ')') {
if(stack.empty()) {
isCorrect = false
return@forEach
}else {
stack.pop()
}
}else {
stack.push(it)
}
}
return isCorrect
}
fun divideString(p: String): Int {
var left = 0
var right = 0
var index = 1
for(it in p) {
if (it == '(')
left++
if (it == ')')
right++
if (left > 0 && right > 0 && left == right) {
break
}
index++
}
return index
}
fun getU(p: String, index: Int): String {
return p.substring(0, index)
}
fun getV(p: String, index: Int): String {
return p.substring(index)
}
}
'알고리즘(Kotlin) > Simulation' 카테고리의 다른 글
[프로그래머스, Kotlin] 멀쩡한 사각형 (0) | 2021.03.25 |
---|---|
[프로그래머스, Kotlin] 신규 아이디 추천 (0) | 2021.03.19 |
Comments