본문 바로가기
Algorithm/백준 자바

백준 4949 자바

by 눈오는1월 2024. 2. 29.
728x90

<문제>

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

 

<풀이>

괄호 짝을 맞춰야 한다 -> 스택을 이용해서 풀어야 한다. (100%는 아님)

 

위 생각을 가지고 스택을 이용했다.

 

문자열을 입력받았을 때 내가 알고 싶은 건 괄호의 짝이 맞는지 확인하는 거기 때문에 일반 문자는 그냥 확인을 하지 않고 괄호만 확인한다.

 

만약 스택이 비어있는 상태에서 짝이 맞지 않는 ')' , ']'이 두 괄호가 들어오는 순간 더 이상 확인 안 하고 no를 출력하면 된다.

')', ']' 모양을 체크할때 스택의 최상단이 짝에 맞게끔 '(', '[' 이면 스택에 넣지 않고 스택을 pop을 진행한다.

'(' '[' 들어오면 무조건 push를 한다. 

마지막줄까지 검사했을때 스택에 괄호가 남아있다면 no를 출력하고 스택이 비어있으면 yes를 출력한다.

 

 

<코드>

import java.util.*;
import java.io.*;
public class Main {

    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        while(true) {
            String s = br.readLine();
            if(s.equals(".")) break;
            Stack<Character> stack = new Stack<>();
            for(int i = 0; i < s.length(); i++) {
                if(s.charAt(i) == '(' || s.charAt(i) == '['){
                    stack.push(s.charAt(i));
                }
                else if(s.charAt(i) == ')') {
                    if(stack.isEmpty() || stack.peek() != '(') {
                        stack.push(s.charAt(i));
                        break;
                    }
                    else if(stack.peek() == '(') stack.pop();
                }
                else if(s.charAt(i) == ']') { {
                    if(stack.isEmpty() || stack.peek() != '[') {
                        stack.push(s.charAt(i));
                        break;
                    }
                }
                    if(stack.peek() == '[') stack.pop();
                }
            }
            if(stack.isEmpty()) {
                sb.append("yes").append("\n");
            }
            else {
                sb.append("no").append("\n");
            }
        }
        System.out.println(sb);

    }
}
728x90

'Algorithm > 백준 자바' 카테고리의 다른 글

백준 2636 치즈 (자바)  (0) 2024.02.29
백준 14502 연구소 (자바)  (0) 2024.02.29
백준 16234 자바  (0) 2024.02.21
백준 2589 자바  (0) 2024.02.21
백준 17298 자바  (0) 2024.02.15