HOIT_B

[프로그래머스 C#] 스킬트리 본문

작고소중한 알고리즘 풀기

[프로그래머스 C#] 스킬트리

HOIT_77 2022. 8. 1. 15:46
728x90

문제 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

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

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

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

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

 

풀이 

가능한 스킬트리 수 출력 

char[] skill_tree_arr = skilltrees.ToCharArray()
char[] skill_order = skill.ToCharArray()
checkOrder

반복문 arr만큼 

인덱스 i의 값이 order에 있으면 
  checkOrder == 인덱스 i값이 order에 있는 인덱스
  이면 넘어가고 order++

인덱스 i값이 체크오더와 순서가 다르면 
 넘어가기 (break;)

 

코드 

using System;
using System.Collections.Generic;
public class Solution {
    public int solution(string skill, string[] skill_trees) {
        int answer = 0;
        //char[] skill_order = skill.ToCharArray();
        List<char> skill_order = new List<char>(skill);
        for(int i=0; i<skill_trees.Length; i++)
        {
            int checkSkill=0;
            char[] temp = skill_trees[i].ToCharArray();
            bool pass = true;
            
            for(int j =0; j<temp.Length; j++)
            {

                // if(Array.Exists(skill_order, x=>x==temp[j]))
                if(skill_order.Contains(temp[j]))
                {
                    //                    if(Array.IndexOf(skill_order,temp[j])==checkSkill)
                    if(temp[j]==skill_order[checkSkill])
                    {
                        checkSkill++;
                        pass = true;
                    }else
                    {
                        pass= false;
                        break;
                    }
                }
                
            }
            
            if(pass==true){answer++;}
        }
        
        
        
        return answer;
    }
}


   

728x90
Comments