article thumbnail image
Published 2023. 1. 19. 16:22

문제 설명

https://www.acmicpc.net/problem/3986

 

3986번: 좋은 단어

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

www.acmicpc.net

단어위로 아치형 곡선을 그려 같은 글자끼리 쌍을 짓기로 했을 때, 선끼리 교차하지 않으면서 각 글자를 정확히 한 개의 다른 위치와 짝을 지을 수 있는 '좋은 단어'의 수 구하기

 

문제 풀이법

좋은 단어란 AABB, ABBA처럼 짝을 지을 수 있는 단어이다

ABAB같은 경우에는 아치형 곡선을 그렸을 때, 선이 교차하므로 좋은 단어가 아니다

 

따라서 stack을 사용하면 된다

  • 만일 단어가 A인 경우
    • 스택이 비어있으면 A를 push
    • 스택이 비어있지 않고, stack의 top이 A이면 pop
    • 스택이 비어있지 않고, stack의 top이 A가 아니면 A를 push
  • 만일 단어가 B인 경우
    • 스택이 비어있으면 B를 push
    • 스택이 비어있지 않고, stack의 top이 B이면 pop
    • 스택이 비어있지 않고, stack의 top이 B가 아니면 B를 push

 

작업이 끝난 후, stack이 비어있다면 좋은 단어이고, 비어있지 않다면 좋은 단어가 아니다

 

소스 코드

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    int n;
    cin >> n;
    
    int sum = 0;
    while (n > 0)
    {
        string str;
        cin >> str;
        
        stack<char> s;
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] == 'A')
            {
                if (s.empty())
                    s.push('A');
                else
                {
                    if (s.top() == 'A')
                        s.pop();
                    else
                        s.push('A');
                        
                }
            }
            else if (str[i] == 'B')
            {
                if (s.empty())
                    s.push('B');
                else
                {
                    if (s.top() == 'B')
                        s.pop();
                    else
                        s.push('B');
                        
                }
            }
        }
        
        if (s.empty())
            sum++;
        n--;
    }

    printf("%d\n", sum);
    return 0;
}

'Algorithm Study' 카테고리의 다른 글

[프로그래머스] 1단계 - 푸드 파이트 대회  (0) 2023.02.05
[백준] 9012 괄호  (0) 2023.01.20
[백준] 4949 균형잡힌 세상  (0) 2023.01.19
[백준] 5430 AC  (0) 2023.01.18
[백준] 1021 회전하는 큐  (0) 2023.01.17
복사했습니다!