leetcode , 백준

[Go] 10773 제로

_HelloWorld_ 2025. 1. 3. 10:58

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을 반환함.
  • 입력 처리:
    1. 첫 번째 입력 값 K는 숫자를 입력받을 횟수를 의미함.
    2. 다음 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