[ 알고리즘풀이 ]
우리는 주어진 skill_trees 중 skill 과 관련된 알파벳만 신경쓰면 되므로, 먼저 skill 을 순회하며 skill 에 나온 Alphabet을 체크한다. 그 후, skill_trees의 tree들을 모두 순회하며, pointer j 를 이용해 tree 중 우리가 신경써야되는 알파벳이 현재 주어진 skill 과 순서가 맞는지 확인하고 아니라면 다음 tree로 넘어간다.
#include <string>
#include <vector>
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = 0;
bool checkAlphabet[26]={};
for(int i = 0; i < skill.length(); i++)
checkAlphabet[skill[i] - 'A'] = 1;
for(int i = 0; i < skill_trees.size(); i++){
bool check = true;
int j = 0;
for(int k = 0; k < skill_trees[i].length(); k++){
if(!checkAlphabet[skill_trees[i][k] - 'A'])
continue;
if(skill[j] != skill_trees[i][k]){
check = false;
break;
}
j++;
}
if(check)
answer++;
}
return answer;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[Programmers] 2 x n 타일링 - travelbeeee (0) | 2020.03.16 |
---|---|
[Programmers] 종이접기 - travelbeeee (0) | 2020.03.13 |
[Programmers] 탑 - travelbeeee (0) | 2020.03.12 |
[Programmers] 124 나라의 숫자 - travelbeeee (0) | 2020.03.11 |
[Programmers] 구명보트 - travelbeeee (0) | 2020.03.10 |