ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 쇠막대
    알고리즘 문제 풀이 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

    댓글

Designed by Tistory.