백준 10799 알고리즘
https://www.acmicpc.net/problem/10799
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
package main
import (
"bufio"
"fmt"
"os"
)
var (
stack []rune = make([]rune, 0)
size int = 0
)
func Push(param rune) {
size++
stack = append(stack, param)
}
func Pop() rune {
size--
result := stack[size]
stack = stack[:size]
return result
}
func main() {
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
sc := bufio.NewScanner(os.Stdin)
sc.Buffer(make([]byte, 100001), 100001)
sc.Scan()
text := sc.Text()
var stick int = 0
var prevWord rune
for _, word := range text {
if word == '(' {
Push(word)
} else {
Pop()
if prevWord == '(' { // '(' 다음 ')' 들어오면 레이저
// 스택 안의 괄호 갯수만큼 막대 카운트
stick += size
} else { // ')' 다음 ')'가 들어온 경우 막대기 끝의 개수 하나 카운트
stick++
}
}
prevWord = word
}
fmt.Fprintln(w, stick)
}