[프로그래머스 C++] 스킬트리

 

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

 

프로그래머스

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

programmers.co.kr


 

해결전략

 

문자열

 

 


 

코드

 

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

vector<int> order; // 스킬트리에 스킬 문자가 들어간 순서를 기록하는 배열. 스킬트리 마다 검사하고 검사 후에는 초기화한다.

int solution(string skill, vector<string> skt) {
    int answer = 0;

    for(int i=0; i<skt.size(); i++){
    	for(int j=0; j<skt[i].size(); j++){
            for(int k=0; k<skill.size(); k++){
                if (skt[i][j] == skill[k]) // 스킬 문자를 찾으면
                    order.push_back(k); // order 배열에 넣어준다. 0, 1, 2, 3, ... 순서로 값이 들어간다.
            }
	    }

        if(order.size() != 0) // 스킬 문자를 하나 이상 포함하고 있다면
        {
            // 스킬 문자가 순서대로 들어갔는지 검사
            // 제대로 들어갔으면 order[0]=0, order[1]=1, order[2]=2, ...
            for (int t = 0; t < order.size(); t++) {
                if (order[t] != t)  // 스킬 문자가 순서대로 들어가지 않았다면
                    break;          // break로 빠져나온다.

                if (t == order.size() - 1) // order배열 끝까지 검사했을때 순서대로면 answer 증가
                    answer++; 
            }
        }
        else // 스킬 문자가 하나도 없는 경우
        {
            answer++; // 문제가 되는 경우가 없으므로 answer 증가
        }

        order.clear(); // 다음 검사를 위해 order 배열 초기화
    }

    return answer;
}