스킬트리
선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다.
따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
입출력 예
"CBD" | ["BACDE", "CBADF", "AECB", "BDA"] | 2 |
skill_trees배열에 있는 스킬트리를 하나씩 확인해야 합니다. find 배열을 만들어 스킬트리 배열에 있는 문자열을 한 글자씩 확인하여 입력받은 skill 문자열에 알파벳이 있다면 find 배열에 삽입합니다. 만든 find 배열 안에 값들을 확인하여 skill 문자열의 각 위치의 알파벳과 확인합니다. 일치하지 않는 알파벳이 없다면, answer + 1을 합니다.
풀이
#include <string>
#include <vector>
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = 0;
for(int i = 0; i < skill_trees.size(); i++){
vector<char> find;
bool check = true;
for(int j = 0; j < skill_trees[i].size(); j++){
if(skill.find(skill_trees[i][j]) != string::npos){
find.push_back(skill_trees[i][j]);
}
}
for(int i = 0; i < find.size(); i++){
if(skill[i] != find[i]) check = false;
}
if (check) answer++;
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[C++] (스택) 기능개발 (0) | 2023.07.12 |
---|---|
[C++] (DP) 점프와 순간이동 (0) | 2023.07.10 |
[C++] 방문 길이 (0) | 2023.06.30 |
[C++] (map) 할인 행사 (0) | 2023.06.29 |
[C++] (원순열) 연속 부분 수열 합의 개수 (0) | 2023.06.22 |
댓글