(프로그래머스/C#) 스킬트리

2021. 3. 9. 02:38·CodingTest

난이도: Level 2

프로그래밍 언어: C#

문제명: 스킬트리

푼일자: 2021년 3월

 

문제 설명

게임 속 스킬트리

선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.

 

예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.

 

위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.

 

선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.

 

제한 조건

  • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
  • 스킬 순서와 스킬트리는 문자열로 표기합니다.
    • 예를 들어, C → B → D 라면 "CBD"로 표기합니다
  • 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
  • skill_trees는 길이 1 이상 20 이하인 배열입니다.
  • skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    • skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.

 

입출력 예

skill skill_tree return
"CBD" ["BACDE", "CBADF", "AECB", "BDA"] 2
  • "BACDE": B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
  • "CBADF": 가능한 스킬트리입니다.
  • "AECB": 가능한 스킬트리입니다.
  • "BDA": B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다.

 

Solution.cs

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
public static int solution(string skill, string[] skill_trees)
{
    int answer = 0;
    char[] SEQ_S = new char[skill.Length];
    for (int w = 0; w < skill.Length; w++) SEQ_S[w] = skill[w];
 
    for (int i = 0; i < skill_trees.Length; i++)
    {
        bool isAdd = true;
        bool[] SEQ = new bool[skill.Length];
        for (int n = 0; n < skill_trees[i].Length; n++)
        {
            int index = Array.FindIndex(SEQ_S, x => x == skill_trees[i][n]);
            if (index != -1) // 현재 스킬이 선행 스킬에 해당되는 경우
                if (index != 0 && SEQ[index - 1] == false) // 첫번째 스킬이 아니고, 이전 선행스킬이 완수되지 않은 경우
                {
                    isAdd = false;
                    continue;
                }
                else SEQ[index] = true;
        }
 
        if (isAdd) answer++;
    }
    return answer;
}
Colored by Color Scripter
cs

 

한번에 통과나와서 뿌듯했어요 :)

반응형
저작자표시 비영리 (새창열림)
'CodingTest' 카테고리의 다른 글
  • (프로그래머스/Java) 신규 아이디 추천
  • (프로그래머스/C#) 기능개발
  • (프로그래머스/C#) 두 정수 사이의 합
  • (프로그래머스/C#) 서울에서 김서방 찾기
Kua
Kua
정보 공유, 개인 정리 공간 입니다.
  • Kua
    Kua's Miscellaneous
    Kua
    • 분류 전체보기 (185)
      • 대문 (2)
      • Tips (25)
        • Chrome (2)
        • Windows (4)
        • IDE (3)
        • 기타 (16)
      • CodingTest (44)
      • Language (20)
        • PHP (5)
        • C# (7)
        • Java (1)
        • Kotlin (7)
      • Framework & Runtime (16)
        • SpringBoot (12)
        • Node.js (2)
        • Vue.js (1)
        • Gradle (1)
      • DevOps (13)
        • Linux (1)
        • Docker (4)
        • Kubernetes (2)
        • Apache Kafka (1)
        • AWS (1)
      • 일상다반사 (53)
        • 도서 (1)
        • 개발 (8)
        • 후기 - IT (7)
        • 후기 - 일상 (13)
        • 차가리 (4)
        • 방송통신대학교 (4)
        • 음식 (2)
      • Games (12)
        • Minecraft (7)
        • VR (2)
        • 그외 (3)
  • 최근 글

  • 인기 글

  • 태그

    github
    Kotlin
    백준
    c#
    minecraft
    bronze1
    후기
    Algorithm
    코딩테스트
    Spring Boot
    Plugin
    갤럭시
    Windows
    error
    bronze2
    Silver5
    spring
    알고리즘
    java
    codingtest
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.0
Kua
(프로그래머스/C#) 스킬트리
상단으로

티스토리툴바