본문 바로가기
Programming Solve/프로그래머스

프로그래머스 - 문자열 내 p와 y의 개수 / C++

by msm1029 2021. 7. 7.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12916

 

코딩테스트 연습 - 문자열 내 p와 y의 개수

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를

programmers.co.kr

 

<코드>

설명은 주석을 통해 대체한다.

방식이 푸시다운 오토마타에서 L = a^nb^n을 인식하는 방식과 똑같다

//p 또는 P 이면 stack에 push
//y가 나왔는데, stack의 top이 p 또는 P이면 pop
//y가 나왔는데, stack이 비어있으면 stack에 push
//p가 나왔는데, stack의 top이 y 또는 Y이면 pop

#include <string>
#include <iostream>
#include <stack>
using namespace std;

bool solution(string s)
{
    bool answer = true;
    stack<char> st;
    
    for(int i=0; i<s.size(); i++){
        if(s[i] == 'p' || s[i] == 'P'){
            if(st.empty() || st.top() == 'p' || st.top() == 'P'){
                st.push(s[i]);
            }
            else{
                st.pop();
            }
        }
        else if(s[i] == 'y' || s[i] == 'Y'){
            if(st.empty() || st.top() == 'y' || st.top() == 'Y'){
                st.push(s[i]);
            }
            else{
                st.pop();
            }
        }
    }
    
    if(!st.empty()) answer=false;
    
    return answer;
}
반응형