https://www.acmicpc.net/problem/9012
더보기
이 문제는 스택을 이용하면 간단하다.
(는 무조건 스택에 넣고, )가 왔을 때 괄호가 만들어질거 같으면 빼면 되고..
(가 없을때 ) 가 오면 잘못됐고, 괄호를 다 완성 시킨거 같은데 스택에 (이 남아 있으면 잘못됐다고 하면 된다.
이를 코드로 만들면
import java.util.Stack
fun main(args: Array<String>) {
question9012()
}
fun question9012() {
val count = readln().toInt()
loop@ for (i in 1 .. count) {
val stack = Stack<Char>()
val strings = readln()
for (j in 0 ..< strings.count()) {
val string = strings[j]
// ( 면 스택 추가
if(string == '(') {
stack.push(string)
} else {
if(stack.isNotEmpty()) {
// (이 있으면 ()이 만들어졌다 가정해서 스택에서 빼버림
stack.pop()
} else {
// (이 없으면 )만 있다는 것으로 가정, 올바른 괄호문자가 아니므로 잘못됨을 표기하고 새 문자를 받음
println("NO")
continue@loop
}
}
}
// 문자 배열을 다 돌고 스택에 값이 남아있으면 (이 남았다는 뜻이므로 잘못된 문자, 다 비었으면 없다는 뜻이므로 잘된 문자.
if(stack.empty()) {
println("YES")
} else {
println("NO")
}
}
}
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 12865번 문제풀이 (1) | 2024.04.08 |
---|---|
Kotlin] 백준 2346번 문제풀이 (0) | 2024.04.04 |
Kotlin] 백준 13909번 문제풀이 (0) | 2024.04.01 |
Kotlin] 백준 2485번 문제풀이 (0) | 2024.03.26 |
Kotlin] 백준 11650번 풀이 (0) | 2024.03.14 |