백준 온라인 저지/Silver

[BOJ] 3986 - 좋은 단어

jooona 2021. 2. 24. 00:51
반응형

-개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다.

 

문제

www.acmicpc.net/problem/3986

 

3986번: 좋은 단어

이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에

www.acmicpc.net

난이도: 실버 4

사용언어: JAVA

 

풀이

이 문제는 스택을 이용하는 전형적인 문제입니다. 다른 고려사항도 없어 쉽게 해결할 수 있습니다. 

 

문자열에서 문자를 받아서

 

1. 스택이 비었으면 스택에 push 한다.

2. 스택이 비어있지 않다면, 스택의 top에 있는 문자를 확인한다.

3. 만약 top에 있는 문자와 자신이 같다면, 해당 문자를 스택에서 pop 해준다.

4. 만약 top에 있는 문자와 자신이 같지 않다면, 자신을 스택에 push 해준다.

 

문자열이 끝날 때까지 위의 과정을 반복한 뒤, 문자열이 종료되었을 때 스택이 비어있다면 '좋은 단어'이고, 스택에 문자가 하나라도 들어있다면, '좋은 단어'가 아닙니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.*;
import java.util.Stack;
 
class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        Stack<Character> stack = new Stack<>();
        int N = Integer.parseInt(br.readLine());
        int i, j;
        int cnt = 0;
        String s;
        char ch;
        for (i = 0; i < N; i++) {
            s = br.readLine(); // 입력에서 한 줄을 받아서
            for (j = 0; j < s.length(); j++) { // 한 줄이 끝날 때 까지
                ch = s.charAt(j); // 문자 하나씩 받아서
                if (stack.empty()) // 스택이 비었으면?
                   stack.push(ch); // push
                else if (ch == stack.peek()) // 스택의 top에 있는 문자가 자신과 같으면
                   stack.pop(); // pop
                else
                   stack.push(ch); // 스택의 top에 있는 문자가 자신과 다르면 push
            }
            cnt += stack.empty() ? 1 : 0; // 한 줄에 대한 연산이 완료된 후, 스택이 비었으면 좋은 단어.
           stack.clear(); // 스택을 비워줌
        }
        bw.write(String.valueOf(cnt) + "\n"); // 좋은 단어의 총 갯수 출력
        bw.flush();
    }
}
 
 
cs

 

반응형

'백준 온라인 저지 > Silver' 카테고리의 다른 글

[BOJ] 16953 - A → B  (0) 2021.02.25
[BOJ] 1463 - 1로 만들기  (0) 2021.02.25
[BOJ] 11399 - ATM  (0) 2021.02.23
[BOJ] 17413 - 단어 뒤집기 2  (0) 2021.02.20
[BOJ] 2491 - 수열  (0) 2021.02.20