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 함수를 제공함.
- push(x): 숫자 x를 스택에 추가함.
- pop(): 스택에서 가장 마지막에 추가된 숫자를 제거하고 반환함. 스택이 비어 있으면 -1을 반환함.
- 입력 처리:
- 첫 번째 입력 값 K는 숫자를 입력받을 횟수를 의미함.
- 다음 K번의 입력 값은 숫자이며, 입력이 0이면 마지막으로 추가된 숫자를 제거해야 함. 그렇지 않으면 해당 숫자를 스택에 추가해야 함.
- 최종 계산:
- 입력 처리가 끝난 후, 스택에 남아 있는 모든 숫자의 합을 계산해야 함.
- 계산된 합은 표준 출력에 출력함.
'leetcode , 백준' 카테고리의 다른 글
[Go] 18258 큐 2 (0) | 2025.01.03 |
---|---|
[Go] 4949 균형잡힌 세상 (0) | 2025.01.03 |
[Go] 9012 괄호 (0) | 2025.01.02 |
83. Remove Duplicates from Sorted List (0) | 2025.01.02 |
70. Climbing Stairs (0) | 2024.10.19 |