본문 바로가기
알고리즘/프로그래머스 문제

[ALGORITHM] LEVEL2 - 택배상자

by HDobby 2022. 10. 27.

https://school.programmers.co.kr/learn/courses/30/lessons/131704?language=cpp 

 

프로그래머스

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

programmers.co.kr

과정

  1. 스택(보조 컨테이너)에 현재 숫자보다 컨테이너 앞에 상자를 넣어준다.
  2. 만약 스택 맨 위의 숫자가 꺼내야하는 상자보다 크고 보조 컨테이너가 차있는 경우 상자를 꺼낼 수 없으므로 종료한다.
  3. 스택 맨 위의 숫자와 꺼내야하는 상자와 일치하면 ans를 1 증가시키고 오더가 끝날때 까지 반복한다.

코드

더보기
#include <string>
#include <vector>
#include <stack>

using namespace std;

int calc(vector<int> order){
    int ans=0;
    int idx=1;
    stack<int> s;
    
    int N=order.size();
    for(int i=0;i<N;++i){
        int num=order[i];
        
        //못꺼내는 경우 = 보조컨테이너에서 꺼낼수 없는 놈 or 컨테이너 맨 앞에 있는 경우
        if(!s.empty()&&s.top()>num){
            break;
        }
        
        while(idx<=num){
            //1번~num이전꺼 까지 보조 컨테이너에 넣음
            s.push(idx++);
        }
        
        if(s.top()==num)
            s.pop();
        
        ++ans;
    }
    
    return ans;
}

int solution(vector<int> order) {
    int answer = 0;
    
    answer=calc(order);
    
    return answer;
}

 

728x90

댓글