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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

큐 사용

#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;

//skill을 큐 사용.
//skill_trees 원소 for문 탐색
// q.top();
// q.pop();
//해당 tree원소가 skill과 같다면
// q.push 후 다음 target skill로 갱신.
// 그렇지 않으면
// 해당 원소가 skill에 있는지 체크, 있다면 flag = false처리 후 break;
//
// 2중 루프에서 1중루프로 빠진 후 flag == true 시 answer++;
int solution(string skill, vector<string> skill_trees) {
    int answer = 0;
    queue<char>q;
    for(int idx = 0; idx < skill.size();++idx){
        q.push(skill[idx]);
    }
    
    for(int y = 0; y < skill_trees.size(); ++y){
       queue<char> tmp = q;
        char tar = tmp.front();
        tmp.pop();
        bool flag = true;
        //skill_trees 원소 for문 탐색
        for(int x =0 ; x < skill_trees[y].size(); ++x){
            //해당 tree원소가 skill과 같다면
            if(tar == skill_trees[y][x]){
                // q.push 후 다음 target skill로 갱신.
                tmp.push(tar);
                tar = tmp.front();
                tmp.pop();
            }
            else{
                // 해당 원소가 skill에 있는지 체크, 있다면 flag = false처리 후 break;
                auto n = skill.find(skill_trees[y][x]); 
                if (std::string::npos != n){
                    flag = false;
                   // cout<<tar<<" "<< y<<" " <<x<<endl;
                    break;
                }
            }
        }
        if(flag) answer++;
    }
    return answer;
}

+ Recent posts