Posted Dec 4, 2020 2020-12-04T16:20:00+09:00 by Daekyo Jeong
Updated Apr 13 2021-04-13T19:23:19+09:00
문제
선행 스킬 순서가 주어질 때, 유저들의 스킬트리가 옳바른지 판단
선행 스킬 순서 : skill
유저들이 만든 스킬트리를 담은 배열 : skill_trees
모든 스킬은 알파벳 대문자
skill의 길이는 1이상 26이하, 중복 없음
skill_trees의 길이는 1이상 20이하
skill_tress의 원소의 길이는 2이상 26이하, 중복 없음
입출력 예시
skill | skill_trees | return |
---|
“CBD” | [“BACDE”, “CBADF”, “AECB”, “BDA”] | 2 |
접근
skill에 담기지 않은 문자들은 어디에 오든 상관이 없다.
따라서 skill_trees에서 skill에 담긴 문자들만 검사해주면 된다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| def solution(skill, skill_trees):
answer = 0
for skill_tree in skill_trees:
idx = 0
flag = True
for s in skill_tree:
if s in skill:
if s == skill[idx]:
idx += 1
else:
flag = False
break
if flag:
answer += 1
return answer
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| #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++){
int index = 0;
bool flag = true;
for(int j = 0; j<skill_trees[i].size();j++){
for(int k =0;k<skill.size();k++){
if(skill[k] == skill_trees[i][j]){
if(k==index){
index++;
break;
}
else{
flag=false;
break;
}
}
}
if(!flag)
break;
}
if(flag)
answer++;
}
return answer;
}
|