본문 바로가기
Study/CodingTest

[BOJ 3986] 좋은 단어 - JAVA

by hi_senii 2022. 8. 28.

이번에는 구현 문제인 좋은 단어 문제를 풀어보았습니다.

문제를 푸는시간보다 문제를 이해하는 시간이 더 오래 걸린것 같은건 기분 탓이겠죠...

구현문제는 문제 파악이 젤 어려운거 같슴다...

 

 

구현 내용

구현 방법

이번 문제는 스택을 이용한다면 풀 수 있는 문제입니다.

가장 마지막에 들어온 값이 이번에 들어가는 값과 같다면 꺼내고 그렇지 않다면 스택에 담으면 됩니다.

 

자세한 방법은 주석을 통해 설명드리겠습니다.

↓↓↓↓↓↓↓↓↓↓↓    ↓↓↓↓↓↓↓↓↓↓↓    ↓↓↓↓↓↓↓↓↓↓↓↓

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 입력
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        // 출력

        int result = 0; //결과
        StringTokenizer stok;
        int n = Integer.parseInt(br.readLine());    //단어 개수
        Stack<Character> s = new Stack<>();         //단어 담을 stack
        for(int i=0;i<n;i++){
            String line = br.readLine();
            for(int j=0;j<line.length();j++){       //단어의 길이 만큼 반복
                Character word = line.charAt(j);    //띄워쓰기가 안되있기때문에
                                                    // charAt 사용
                if(s.empty()){                      //스택이 비었다면 스택에 추가
                    s.add(word);
                    continue;
                }
                if(word==s.peek()){                 //가장 마지막에 들어갔던 값이
                                                    //이번에 들어갈 값과 같다면 꺼내기
                    s.pop();
                }
                else{
                    s.add(word);                    //마지막에 들어간 값과 다르다면
                                                    //스택에 추가
                }
            }
            if(s.empty()){                          //단어 끝까지 확인 후 스택이 비었다면
                result++;                           //짝이 맞게 교차하지 않기때문에 좋은단어이다
            }
            s.clear();                              //다음단어 확인 전 스택 클리어
        }
        bw.write(String.valueOf(result));

        bw.flush();
    }
}

'Study > CodingTest' 카테고리의 다른 글

[BOJ 17413] 단어 뒤집기 2 - JAVA  (0) 2022.09.09
[BOJ 1966] 프린터 큐 - JAVA  (0) 2022.09.05
[BOJ 11000] 강의실 배정 - JAVA  (0) 2022.08.21
[BOJ 1946] 신입 사원 - JAVA  (0) 2022.08.12
[BOJ 1541] 잃어버린 괄호 - JAVA  (0) 2022.08.07