[백준 / 3986 / C++] 좋은 단어

Park·2023년 9월 29일
0

코딩테스트 - Week1

목록 보기
11/15

1. 문제 접근

  • 스택을 활용하여 문제를 풀어야 함.
    • 스택에 문자열의 문자를 하나씩 넣으면서, 가장 위에 있는 문자열이 새로 push하는 문자열과 비교

2. 시행착오

  1. 좋은 단어의 정의를 잘못 이해함
  2. 스택을 활용할 때, 스택이 비어있는 경우를 고려하지 못함

3. 코드 및 풀이

3.1 풀이

  • 입력된 각 문자열을 stack을 활용해 좋은 문자인지 좋지 않은 문자열인지 판단함
    • 스택에 넣기 전, 스택에 남아있는, 가장 위에 있는 문자와 들어올 문자열을 비교해서, 만약 일치한다면, 스택의 문자열을 삭제, 일치하지 않으면 스택에 문자열을 넣음
    • 그 과정이 모두 끝나고, 스택이 비어있다면, cnt를 추가
#include <bits/stdc++.h>
using namespace std;

int n, cnt;
string s;

int main(){

    // 1. Input n and s for each n
    cin >> n;
    for(int i = 0; i < n; i++) {
        cin >> s;
        stack<char> st;
    // 2. Push each character of string to stack;
        for(char c : s) {
            if (st.size() && st.top() == c) st.pop();
            else st.push(c);
        }
        if (st.size() == 0) cnt++;

    }

    cout << cnt;

    return 0;
}

Reference

profile
안녕하세요!

0개의 댓글