코테/백준

[백준/JAVA] 3986번: 좋은 단어

imname1am 2023. 9. 5. 17:12
반응형

🔺 문제

 

3986번: 좋은 단어

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

www.acmicpc.net

 

 

🔺 코드

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
35
36
37
38
39
import java.util.*;
import java.io.*;
 
public class Main {    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int N = Integer.parseInt(br.readLine());
        int cnt = 0;
        
        for(int i = 0 ; i < N ; i++) {
            char[] arr = br.readLine().toCharArray();
 
            if(solve(arr))  cnt++;
        }
        
        System.out.println(cnt);
    }
    
    private static boolean solve(char[] ch) {
        Stack<Character> stack = new Stack<>();
        
        for(int j = 0 ; j < ch.length ; j++) {
            if(stack.isEmpty()) {
                stack.push(ch[j]);
            }
            else {
                if(stack.peek() == ch[j]) {
                    stack.pop();
                }
                else {
                    stack.push(ch[j]);
                }
            }
        }
        
        return stack.isEmpty() ? true : false;
    }
}
cs
✅ 해결 아이디어
✔ 스택
- 스택이 비어있으면, 문자 삽입
- 스택이 비어있지 않으면, 스택의 최상단 원소와 현재 문자 값 비교
  └ 스택 최상단 원소 = 현재 문자값 ⇨ 최상단 원소 제거 (pop())
  └ 스택 최상단 원소 ≠ 현재 문자값 ⇨ 스택에 원소 추가

 


🔺 다른 풀이들

- 많이들 조건문을 이렇게 처리하셨다. (참고)

for(int j = 0 ; j < str.length() ; j++) {
    if(!stack.isEmpty() && str.charAt(j) == stack.peek()) 
        stack.pop();
    else 
        stack.push(str.charAt(j));
}

💬 느낀 점

오랜만에 스택 문제 푸니까 머리 안 아프고 재밌다ㅠㅠㅠㅠ

 

1회독 2회독 3회독 4회독 5회독
V        

 

반응형