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