ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 스킬트리
    Algorithm/Programmers 2020. 5. 30. 16:11

    [Level 2] 스킬트리

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

    • 선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성
    • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있다.

     

     

    Solution

    • 스킬트리 배열(skill_trees[])의 원소에 대해 주어진 선행 스킬순서에 위배되지 않는지 체크하면서 answer++
    • Skill 클래스에 bool 타입의 used 속성을 만들어 isVaild() 함수에서 위배여부를 체크했다.
    • 다른 사람들 풀이 보니까 자괴감 느껴짐 ,, 오래 생각 하고 풀어야겠다.
    • 그럼 너무 오래인데 어떡하지?

     

     

    소스코드

     

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import java.util.*;
    class Solution {
        static Skill[] skills;
        static int answer = 0;
     
        static class Skill {
            private char name;
            private boolean used;
     
            public Skill(char name) {
                this.name = name;
                this.used = false;
            }
        }
     
        public static int solution(String skill, String[] skill_trees) {
            skills = new Skill[skill.length()];
            for(int i = 0; i< skill.length(); i++) {
                skills[i] = new Skill(skill.charAt(i));
            }
            for (int i = 0; i < skill_trees.length; i++) {
                ready(skill);
                for (int j = 0; j < skill_trees[i].length(); j++) {
                    char ch = skill_trees[i].charAt(j);
                    if (skill.contains(Character.toString(ch))) {
                        if(!isVaild(ch))
                            break;
                    }
     
                    if (j == skill_trees[i].length() - 1) {
                        System.out.println(skill_trees[i]);
                        answer++;
                    }
                }
            }
            System.out.println(answer);
            return answer;
        }
     
        public static boolean isVaild(char ch) {
            int idx = 0;
            while (skills[idx].name != ch) {
                if (!skills[idx].used)
                    return false;
                idx++;
            }
            skills[idx].used = true;
            return true;
        }
        
        public static void ready(String skill) {
            for(Skill s : skills) {
                s.used = false;
            }
        }
    }
    cs

     

    'Algorithm > Programmers' 카테고리의 다른 글

    [Programmers] 쇠막대기  (0) 2020.05.31
    [Programmers] 다리를 건너는 트럭  (0) 2020.05.30
    [Programmers] 프린터  (0) 2020.05.29
    [Programmers] 주식가격  (0) 2020.05.29
    [Programmers] 베스트앨범  (0) 2020.04.24

    댓글

Designed by Tistory.