이게 도대체 무슨 문제일까 처음 접근 방식을 떠올리기가 힘든 문제 였습니다.
근데 스택문제라는 걸 알고 다시보니까 앞에서 부터 한개씩 숫자 이것저것 맞춰보니까 아..? 어? 오.. 하고 깨달았습니다. ㅋㅋ
풀이법은 다음과 같습니다.
- "(" 이면 스택에 넣는다.
- ")" 이면 그 앞 인덱스의 괄호를 확인한다.
- 그 앞 괄호가 "(" 이라 레이저를 뜻하는 괄호면 그 동안 스택에 쌓아 놨던 "("의 갯수를 더해준다.
- 그 앞 괄호가 ")" 이라 쇠막대기의 끝을 뜻하는 괄호면 스택에 쌓아놨던 "("를 하나 없애고 두개로 쪼개지는 것이므로 +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 |