알고리즘 문제 풀이
프로그래머스 - 쇠막대
블린더르
2020. 7. 28. 23:04
/*
* 2020-07-28
* https://programmers.co.kr/learn/courses/30/lessons/42585
*/
class IronBar {
fun solution(arrangement: String): Int {
/*
val ironBarList = ArrayList<Int>()
var answer = 0
var prev:Char? = null
arrangement.forEach {
if(it == '('){
ironBarList.add(1)
}
if(it == ')'){
if(prev == '('){
val openCount = ironBarList.removeAt(ironBarList.count()-1) - 1
if(openCount > 0){
ironBarList.add(openCount)
}
ironBarList.add(0)
}else{
ironBarList.add(-1)
}
}
prev = it
}
var ironBarCount = 0
ironBarList.forEach {
if(it > 0){
ironBarCount += 1
}
if(it < 0){
answer += 1
--ironBarCount
}
if(it == 0 && ironBarCount >0){
answer += ironBarCount
}
}
return answer
*/
var answer = 0
var prev: Char? = null
var ironBarCount = 0
arrangement.forEach {
if (it == '(') {
ironBarCount += 1
}
if (it == ')') {
--ironBarCount
answer += if (prev == '(') {
ironBarCount
} else {
1
}
}
prev = it
}
return answer
}
}
fun main() {
val result = IronBar().solution(
"()(((()())(())()))(())"
)
println(result)
}
처음에는 주석된 코드로 작성했다가
생각해보니 배열로 만들어서 다시 루프를 돌려 계산하는 것이면
배열에 추가하는 시점에 계산해도 상관 없을 것 같다는 생각이 들어서arrangement
를 읽으면서 계산하도록 수정했다
반응형