-
프로그래머스 - 쇠막대알고리즘 문제 풀이 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
를 읽으면서 계산하도록 수정했다반응형'알고리즘 문제 풀이' 카테고리의 다른 글
프로그래머스 - 기능개발 (0) 2020.08.05 프로그래머스 - 주식가격 (0) 2020.07.30 프로그래머스 - 탑 (0) 2020.07.27 프로그래머스 - H-Index (0) 2020.07.26 프로그래머스 - 가장 큰 수 (0) 2020.07.24