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

 

프로그래머스

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

programmers.co.kr

문제 내용 :

1.택배차가 원하는 택배번호 순서대로 택배를 실어야 함(인자값 : vector<int> order)

2.메인 컨테이너 벨트에 오름차순으로 택배가 존재하며,제일 앞에 택배만 꺼낼 수 있음

3.택배차에 짐을 실을때 원하는 택배가 아닌경우 서브 컨테이너 벨트에 택배를 보관할수 있음,

3-1.서브컨테이너 벨트는 제일 마지막에 쌓은 택배만 꺼낼 수 있음

4.두 벨트 에서 원하는 택배를 못 실을 경우 택배차는 출발함

이때 택배차에 몇개의 택배를 실을수 있는지 최대값을 찾는 문제 


풀이 : 

문제내용1 -> queue 자료구조에 적합 (순서대로 작업함에 따라 택배를 실고 삭제할때 앞에 원소 삭제하기가 용이함)

문제내용2 -> queue 자료구조에 적합

문제내용3 -> stack 자료구조에 적합

 

택배차의 queue<int> order를 순회하며 메인벨트(queue)와 서브벨트(stack)을 체크하며 answer의 값을 증가,

두 벨트에서 짐을 다 못 실을 경우 서브벨트에 택배를 쌓는다.

만약 메인벨트에서 더이상 서브벨트로 넣을 택배가 없으면  반복문에서 탈출하여 그대로 answer를 반환


코드 영역

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

using namespace std;

//1.메인벨트와  적재 박스 비교
//2.같은경우 벨트와 적재박스 큐에서 제외 후 ,answer증가
//3.다른경우 서브벨트 top과 비교해서 같은경우 stack과queue에서 제외후 answer증가
//3.둘다 다른경우 서브벨트에 적재

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

    queue<int> q_order; // 기사님이 원하는 택배 순서
    queue<int> main_belt;// 메인 컨테이너벨트
    stack<int> sub_belt; // 서브 컨테이너벨트
    
    //택배차의 원하는 택배순서를 queue로 저장
    for (int i = 0; i < order.size(); i++)
    {
        main_belt.push(i + 1); 
        q_order.push(order[i]); 
    }

    while (!q_order.empty())
    {
        //메인 벨트의 택배와 택배차의 order list와 비교
        if (!main_belt.empty() && q_order.front() == main_belt.front())
        {
            answer++;
            q_order.pop();
            main_belt.pop();
        }
        //서브 벨트의 택배와 택배차의 order list와 비교
        else if (!sub_belt.empty() && q_order.front() == sub_belt.top())
        {
            answer++;
            q_order.pop();
            sub_belt.pop();
        }
        //메인 벨트의 서브 벨트 둘다 택배가 없는경우
        else
        {
            //메인 벨트에 택배가 있으면 서브벨트에 해당 택배를 보관 후 다시 순회
            if (!main_belt.empty())
            {
                sub_belt.push(main_belt.front());
                main_belt.pop();
            }
            //메인 벨트에 택배가 없으면 더이상 할 수 없으므로 탈출후 반환
            else { return answer; }
        }

    }

    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV1.둘만의 암호  (0) 2023.10.26
LV1.체육복  (0) 2023.10.26
LV2.롤케이크 자르기  (0) 2023.10.26
LV2.숫자 변환하기  (0) 2023.10.26
LV2.2개 이하로 다른 비트  (0) 2023.10.26

+ Recent posts