Description
Code
package main
import (
"bufio"
"os"
"fmt"
)
var (
rd = bufio.NewReader(os.Stdin)
sc = bufio.NewScanner(os.Stdin)
wr = bufio.NewWriter(os.Stdout)
Stack []int
)
func push(x int) {
Stack = append(Stack, x)
}
func pop() int {
if len(Stack) == 0 {
return 0
}
x := Stack[len(Stack)-1]
Stack = Stack[:len(Stack)-1]
return x
}
func main() {
defer wr.Flush()
for sc.Scan() {
str := sc.Text()
if str == "." {
break
}
checkIsBalanced(str)
Stack = nil
}
}
func checkIsBalanced(str string) {
for _, s := range str {
if s == '(' || s == '[' {
push(int(s))
continue
}
if s == ')' {
if pop() != int('(') {
fmt.Fprintln(wr, "no")
return
}
}
if s == ']' {
if pop() != int('[') {
fmt.Fprintln(wr, "no")
return
}
}
}
if len(Stack) != 0 {
fmt.Fprintln(wr, "no")
return
}
fmt.Fprintln(wr, "yes")
}
- 스택 구현: 괄호를 저장하고 매칭을 검사하기 위해 스택을 정의하고 push와 pop 함수를 사용함.
- 입력 처리: 표준 입력으로 여러 줄의 문자열을 받아 처리하며, .을 입력하면 종료해야 함.
- 균형 검사: 문자열을 순회하며 괄호의 열림((, [)은 스택에 추가하고, 닫힘(), ])은 스택에서 꺼내 매칭 여부를 검사해야 함.
- 매칭 실패 시 즉시 "no"를 출력함.
- 문자열 처리 후 스택에 값이 남아있으면 "no"를 출력해야 함.
- 결과 출력: 입력된 문자열이 균형 잡힌 괄호라면 "yes", 아니라면 "no"를 출력해야 함.
'leetcode , 백준' 카테고리의 다른 글
[Go] 11866 요세푸스 문제 0 (0) | 2025.01.03 |
---|---|
[Go] 18258 큐 2 (0) | 2025.01.03 |
[Go] 10773 제로 (0) | 2025.01.03 |
[Go] 9012 괄호 (0) | 2025.01.02 |
83. Remove Duplicates from Sorted List (0) | 2025.01.02 |