-
[Baekjoon Online Judge] 4949번: 균형잡힌 세상문제 풀이/Baekjoon Online Judge 2021. 1. 23. 14:54
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
요구사항
- 어떤 문자열이 주어졌을 때, 괄호들이 균형이 잘 맞춰져 있는지 판단하는 프로그램
- 문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.
- 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다.
- 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다.
- 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다.
- 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.
- 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.입력
- 하나 또는 여러줄에 걸쳐서 문자열이 주어진다.
- 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며,
- 길이는 100글자보다 작거나 같다.
- 입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다.출력
- 각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다.
import java.io.*; import java.util.Stack; public class Baekjoon4949 { private static boolean isBalance(String words) { Stack<Character> stack = new Stack<>(); for (int i = 0; i < words.length(); i++) { char c = words.charAt(i); if (c == '(' || c == '[') { stack.push(c); } else if (c == ')') { if (stack.isEmpty() || stack.peek() != '(') return false; else stack.pop(); } else if (c == ']') { if (stack.isEmpty() || stack.peek() != '[') return false; else stack.pop(); } } if (stack.isEmpty()) return true; else return false; } public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); while (true) { String words = bufferedReader.readLine(); if (words.equals(".")) break; if (isBalance(words)) bufferedWriter.write("yes\n"); else bufferedWriter.write("no\n"); } bufferedWriter.flush(); bufferedReader.close(); bufferedWriter.close(); } }
여는 괄호를 stack에 넣어 닫는 괄호가 나올 때 마다 검증을 통하여 균형잡힌 문장인지 확인하는 문제이다. 요구사항 자체는 어렵지 않았지만 자꾸만 하나씩 빼먹는 바람에 코드를 지속적으로 수정해야 했다. 특히 마지막에 괄호가 없는 문장에 경우 stack이 비었음을 한번 더 검증해 줘야 한다.
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 10798번: 세로읽기 (0) 2021.01.24 [Baekjoon Online Judge] 10610번: 30 (0) 2021.01.24 [Baekjoon Online Judge] 1764번: 듣보잡 (0) 2021.01.20 [Baekjoon Online Judge] 2468번: 안전 영역 (0) 2021.01.20 [Baekjoon Online Judge] 4963번: 섬의 개수 (0) 2021.01.19