본문 바로가기

알고리즘/Stack

백준 10799 쇠막대기

이게 도대체 무슨 문제일까 처음 접근 방식을 떠올리기가 힘든 문제 였습니다.

근데 스택문제라는 걸 알고 다시보니까  앞에서 부터 한개씩 숫자 이것저것 맞춰보니까 아..? 어? 오.. 하고 깨달았습니다. ㅋㅋ

 

풀이법은 다음과 같습니다.

  1. "(" 이면 스택에 넣는다.
  2. ")" 이면 그 앞 인덱스의 괄호를 확인한다.
  3. 그 앞 괄호가 "(" 이라 레이저를 뜻하는 괄호면 그 동안 스택에 쌓아 놨던 "("의 갯수를 더해준다.
  4. 그 앞 괄호가 ")" 이라 쇠막대기의 끝을 뜻하는 괄호면 스택에 쌓아놨던 "("를 하나 없애고 두개로 쪼개지는 것이므로 +1 더해줌

 

풀이방법

func sol() {
    let input = Array(readLine()!)
    var answer = 0
    var lineNum = 0
    
    for i in 0..<input.count {
        if input[i] == "(" {
            lineNum += 1
        } else {
            if input[i-1] == ")" {
                lineNum -= 1
                answer += 1
            } else {
                lineNum -= 1
                answer += lineNum
            }
        }
    }
    
    print(answer)
}

sol()

 

반응형

'알고리즘 > Stack' 카테고리의 다른 글

백준 11899 괄호 끼워넣기  (0) 2022.01.26
백준 17413 단어 뒤집기 2  (0) 2022.01.24
백준 3986 좋은 단어  (0) 2022.01.22
백준 9012 괄호  (0) 2022.01.19
백준 12605 단어순서 뒤집기  (0) 2022.01.18