좋은 단어

이윤설·2024년 4월 2일



제출코드

없음. 스택을 사용해보려 했지만 아이디어가 안떠오름 ㅠ

모범답안

class Main {
    public static void main(String[] args) throws IOException {

        /**
         *  연속으로 [A,A] 또는 [B,B]가 스택에 들어오면 제거하여 
         최종적으로 스택이 비어있으면 카운트를 늘린다.
         */

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int count = 0;

        for (int i = 0; i < n; i++) {
            String line = br.readLine();
            Stack<Character> stack = new Stack<>();

            for (int j = 0; j < line.length(); j++) {
                if (stack.size() > 0 && stack.peek() == line.charAt(j)) {
                    stack.pop();
                } else {
                    stack.push(line.charAt(j));
                }
            }
            if (stack.size() == 0) {
                count++;
            }
        }
        System.out.println(count);
    }
}

구현 방식 자체는 간단했다.
스택 안에 아무것도 없으면 push()를 하고,
스택 안에 요소가 있으면 후보와 peek()한 값과 동일하면 좋은단어로 판단하여 두 값을 제거한다.

세번째 경우를 보자. A,A가 서로 B,B사이에 떨어져있지만 마지막에 스택은 empty가 된다.


사실 이런 문제는 실력도 실력이지만 문제를 많이 풀어봐야 풀 수 있는 것 같다. 확실히 실버 문제들은 단순히 자료구조를 잘 아는 것보다 풀이요령을 아는게 중요한 것 같다.

6월에는 이런 어려운 문제도 잘 풀 수 있겠지?!

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글