TIL 2022-08-01-월

그린·2022년 8월 1일
0

TIL

목록 보기
46/47

1. 학습한 내용

백준 자료구조 4949번 풀이

2. 알게 된 내용

처음에는 ')'가 입력되고 stack이 비어 있는 경우(']'가 입력되고 stack이 비어 있는 경우)에 stack에 push하는 방식으로.. 진행해서 마지막에 stack이 비어 있지 않게 했는데... 이러면 틀린 것이였다.

            for (int i = 0; i < input.length(); i++) {
                char c = input.charAt(i);
                if (c == '(' || c == '[') {
                    stack.push(c);
                } else if (c == ')' && stack.size() > 0 && stack.peek() == '(') {
                    stack.pop();
                } else if (c == ']' && stack.size() > 0 && stack.peek() == '[') {
                    stack.pop();
                } else if (c == ')' && stack.isEmpty()) {
                    stack.push(c);
                    break;
                } else if (c == ']' && stack.isEmpty()) {
                    stack.push(c);
                    break;
                }
            }

반례 - (]).
정답 : no
하지만 위 코드의 경우에는 ]가 들어온 것에 대해 처리를 하지 않는다... 이것이 문제였다.

그래서 고친 코드로는,

        while (!(input = br.readLine()).equals(".")) {
            Stack<Character> stack = new Stack<>();
            for (int i = 0; i < input.length(); i++) {
                char c = input.charAt(i);
                if (c == '(' || c == '[') {
                    stack.push(c);
                } else if (c == ')') {
                    if (stack.isEmpty() || stack.peek() != '(') {
                        System.out.println("no");
                        continue Loop1;
                    }
                    else
                        stack.pop();
                } else if (c == ']') {
                    if (stack.isEmpty() || stack.peek() != '[') {
                        System.out.println("no");
                        continue Loop1;
                    }
                    else
                        stack.pop();
                }
            }

위와 같이 딱 해당 괄호에 대해서 직접 처리를 해주는 방법으로 수정했다.
참고 : https://st-lab.tistory.com/180

모든 경우를 잘 고려하면서 코드를 짜자!

profile
기록하자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN