-
4949 - 균형잡힌 세상알고리즘 2023. 5. 30. 19:29728x90
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
문제요약
- [ ] ,( ) 대로 괄호 쌍이 맞아야 하는 문제
이전에 풀었던 문제와 비슷
stack에 쌓으면서 괄호쌍이 맞으면 제거하는 식으로 진행하였다.
만일 괄호쌍이 전부 제거된 상태에서 닫는 괄호( ) , ] )가 나온다면 바로 멈추는 작업을 추가했다.import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class Main { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // () [] 섞인 문자열 // 토큰 단위 검사 필요함 // 한토큰에서 문자열을 돌면서 () [] 체크 while (true) { Stack<Character> stack = new Stack<>(); String senten = reader.readLine(); boolean check = true; // 종료 조건 if (senten.charAt(0) == '.' && senten.length() == 1) { break; } // 한문장에서 받은 토큰이 끝날 때까지 반복 for (int i = 0; i < senten.length(); i++) { // stack 넣기 // for (int i = 0; i < tempWord.length(); i++) { char temp = senten.charAt(i); if (temp == ')') { if (stack.isEmpty()) { check = false; break; } else { if (stack.peek() == '(') stack.pop(); else stack.push(temp); } } else if (temp == '(') stack.push(temp); if (temp == ']') { if (stack.isEmpty()) { check = false; break; } else { if (stack.peek() == '[') stack.pop(); else stack.push(temp); } } else if (temp == '[') stack.push(temp); } // 출력 결정 조건 if (stack.isEmpty()) { // check=false이거나, 다 지워져서 왔거나 if (!check) System.out.println("no"); else System.out.println("yes"); } else System.out.println("no"); } } }
느낀점
이전에 해봤던 문제가 쌓이면서 해결하는 시간도 단축되고 경험도 쌓이고 있다.
끝까지 해봐야지
'알고리즘' 카테고리의 다른 글
11866 - 요세푸스 문제 0 (0) 2023.05.30 11279 - 최대 힙 (0) 2023.05.30 9012 - 괄호 (0) 2023.05.26 1021 - 회전하는 큐 (0) 2023.05.26 1874 - 스택 수열 (1) 2023.05.26