https://school.programmers.co.kr/learn/courses/30/lessons/133502

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

stack을 이용하여 풀었다. 풀이 방법은 조건에 만족하면 푸쉬 해주고 만족하지 않으면 버려주는 형태로 진행했다.

조건1. stack이 비어있을 때 다음에 들어올 것이 1이어야 한다.

조건2. 다음에 들어올 것이 1이다. 이 때 stack의 top이 3이면 answer++해주고 1,2,3을 제거해주고 1을 넣지 않는다.

조건3. 다음에 들어올 것이 stack의 top+1의 값과 같아야 한다. 만약 같지 않으면 기존의 stack 전체를 pop해준다.

 

#include <string>
#include <vector>
#include <stack>

using namespace std;

stack<int> st;
//순서가 만족하지 않으면 안 넣으면 되자나
int solution(vector<int> ingredient) {
    int answer = 0;
    for(int i = 0 ; i<ingredient.size(); i++){
        if(st.empty()){
            if(ingredient[i]==1)
                st.push(1);
        }
        else{
            if(ingredient[i]==1){
                if(st.top()==3){
                    for(int j=0; j<3; j++){
                        st.pop();
                    }
                    answer++;
                }else{
                    st.push(1);
                }
            }
            else{
                if(st.top()+1 == ingredient[i]){
                    st.push(ingredient[i]);
                }else{
                    while(!st.empty()){
                        st.pop();
                    }
                }
            }
        }
    }
    return answer;
}

+ Recent posts