728x90
문제 링크 - 단계별 풀이 중 스택 하위로 분류되어 있다. 스택을 활용하여 풀었다.
https://www.acmicpc.net/problem/4949
입력된 문자열을 char 단위로 순회하며 괄호 문자 [, ], (, ) 차례가 올 때,
왼쪽 방향 괄호 (, [ 인지를 판단하여 아니라면 스택에 추가하고 다시 순회한다.
이후 다음 [, ], (, ) 차례에서 현재 스택의 peek 값이 왼쪽 방향 괄호 [, ( 일 경우 차례가 온 char와 비교하여
순서쌍이 맞다면 스택에서 peek 값을 pop 처리하여 계산에 제외시킨다.
fun balanceWorld() = with(Scanner(System.`in`)) {
val stack = Stack<Char>()
while (true) {
val str = readln()
if (str == ".") return@with
str.forEach {ch ->
//스택에 있는 마지막 문자 가져오기
val lastElement = if (stack.isNotEmpty()) stack.peek() else null
if (ch == '[' || ch == ']' || ch == '(' || ch == ')') {
if (lastElement == '[') {
if (ch == ']') stack.pop() //순서쌍이 맞으므로 스택에서 제거
else stack.add(ch)
} else if (lastElement == '(') {
if (ch == ')') stack.pop() //순서쌍이 맞으므로 스택에서 제거
else stack.add(ch)
} else stack.add(ch) //다음 체크를 위해 스택에 추가
}
}
if (stack.isEmpty()) println("yes") else println("no")
stack.clear()
}
}
해당 문제 스택에 대해 추후 그림으로 추가 표현을 넣도록 하겠다.
728x90