leetcode , 백준

[Go] 4949 균형잡힌 세상

_HelloWorld_ 2025. 1. 3. 11:06

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