Posts [알고리즘] 프로그래머스 - 스킬트리
Post
Cancel

[알고리즘] 프로그래머스 - 스킬트리


문제

선행 스킬 순서가 주어질 때, 유저들의 스킬트리가 옳바른지 판단
선행 스킬 순서 : skill
유저들이 만든 스킬트리를 담은 배열 : skill_trees
모든 스킬은 알파벳 대문자
skill의 길이는 1이상 26이하, 중복 없음
skill_trees의 길이는 1이상 20이하
skill_tress의 원소의 길이는 2이상 26이하, 중복 없음


입출력 예시

skillskill_treesreturn
“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
  • C++ 코드
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;
}


This post is licensed under CC BY 4.0 by the author.

[알고리즘] 프로그래머스 - 세 소수의 합

[알고리즘] 프로그래머스 - 배상 비용 최소화