본문 바로가기
Algorithm & SQL/BAEKJOON

백준 JAVA 4949 균형잡힌 세상

by YoonJong 2022. 8. 11.
728x90

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

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

 

 

음 .. 먼저 조건에 맞게 코드를 짜서 출력대로 잘나와서 제출했는데 20%에서 계속 틀렸다.

예외가 뭔지를 모르겠다..

다른 블로그를 한번 참고해보고 다시한번 풀어보았는데, 코드 그대로 따라가면서 볼때는 비슷해보이는데 

왜 틀렸는지 잘모르겠다 ㅠㅠ 어떤 조건에서 틀린걸까..

 

질문에 올려보고 답이 오면 다시한번 대입해봐야겠다.

 

 

실패코드

package BAEKJOON.Silver.Ⅳ;

import java.util.Scanner;
import java.util.Stack;

public class NO4949X {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        Stack<Character> stack = new Stack<>();


        while (true) {
            stack.clear();
            String str = sc.nextLine();

            // . 만 입력되면 입력종료
            if (str.equals(".")) {
                break;
            }

            for (int i = 0; i < str.length(); i++) {
                if ((stack.isEmpty() && str.charAt(i) == ')') || (stack.isEmpty() && str.charAt(i) == ']')) {
                    stack.push(str.charAt(i));
                    break;

                } else if (str.charAt(i) == '(' || str.charAt(i) == '[') {
                    stack.push(str.charAt(i));

                } else if (str.charAt(i) == ')' && stack.peek() == '(') {
                    stack.pop();

                } else if (str.charAt(i) == ']' && stack.peek() == '[') {
                    stack.pop();
                }
            }

            if(stack.isEmpty()) {
                System.out.println("yes");
            } else {
                System.out.println("no");
            }
        }
    }
}

 

성공코드

package BAEKJOON.Silver.Ⅳ;

import java.util.Scanner;
import java.util.Stack;

public class NO4949 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        Stack<Character> stack = new Stack<>();


        while (true) {
            stack.clear();
            String str = sc.nextLine();

            // . 만 입력되면 입력종료
            if (str.equals(".")) {
                break;
            }

            for (int i = 0; i < str.length(); i++) {
                // ( , [ 가 입력되면 stack 에 추가
                if (str.charAt(i) == '(' || str.charAt(i) == '[') {
                    stack.push(str.charAt(i));
                    //  ) , ] 가 입력되었는데
                } else if (str.charAt(i) == ')' || str.charAt(i) == ']') {
                    // 스택이 비어있거나, 이전 스택의 값이 ( 가 아닌데 ) 가 들어오거나
                    if (stack.isEmpty() || (stack.peek() != '(' && str.charAt(i) == ')')
                            // 이전 스택의 값이 [ 가 아닌데 ] 가 들어오면
                            || (stack.peek() != '[' && str.charAt(i) == ']')) {
                        //stack 에 추가하고 for 문 종료
                        stack.push(str.charAt(i));
                        break;
                    } else {
                        // 위 조건이 아니라면 pop
                        stack.pop();
                    }
                }
            }
            // 스택이 비어있으면 yes 남아있으면 no
            if (stack.isEmpty()) {
                System.out.println("yes");
            } else {
                System.out.println("no");
            }
        }
    }
}
728x90

'Algorithm & SQL > BAEKJOON' 카테고리의 다른 글

백준 JAVA 1977 프린터 큐  (0) 2022.08.12
백준 JAVA 1874 스택 수열  (0) 2022.08.12
백준 JAVA 11651 좌표 정렬하기2  (0) 2022.08.11
백준 JAVA 11650 좌표 정렬하기  (0) 2022.08.11
백준 10816 JAVA 숫자 카드2  (0) 2022.08.10

댓글