Home 백준 알고리즘 9012
Post
Cancel

백준 알고리즘 9012

백준 9012 알고리즘

https://www.acmicpc.net/problem/9012

"9012"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

type Stack struct {
	data []string
	size int
}

func New(size int) *Stack {
	return &Stack{
		data: make([]string, size),
		size: 0,
	}
}

func (stack *Stack) Push(num string) error {
	if len(stack.data) > stack.size {
		stack.data[stack.size] = num
		stack.size++

		return nil
	}

	return fmt.Errorf("out of memory")
}

func (stack *Stack) Pop() string {
	if stack.Empty() {
		return ""
	} else {
		result := stack.data[stack.size-1]
		stack.size--

		return result
	}
}

func (stack *Stack) Empty() bool {
	if stack.size == 0 {
		return true
	} else {
		return false
	}
}

func (stack *Stack) Size() int {
	return stack.size
}

func (stack *Stack) Top() string {
	if stack.Empty() {
		return ""
	} else {
		return stack.data[stack.size-1]
	}
}

func main() {
	w := bufio.NewWriter(os.Stdout)
	defer w.Flush()
	scn := bufio.NewScanner(os.Stdin)

	var n int
	fmt.Scanln(&n)

	for i := 0; i < n; i++ {
		stack := New(n)
		var valid bool = true
		scn.Scan()
		text := scn.Text()
		split := strings.Split(text, "")
		for _, v := range split {
			if v == "(" {
				stack.Push(v)
			} else {
				// 여는 괄호 부족한 경우
				if ret := stack.Pop(); ret == "" {
					valid = false
					break
				}
			}
		}

		// 여는 괄호가 많거나, 부족한 경우
		if stack.size == 0 && valid {
			fmt.Fprintln(w, "YES")
		} else {
			fmt.Fprintln(w, "NO")
		}
	}
}

This post is licensed under CC BY 4.0 by the author.