◎ 문제
○ 출처
https://programmers.co.kr/learn/courses/30/lessons/49993#
○ 문제 설명
선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 [스파크 → 라이트닝 볼트 → 썬더]일때, 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees가 매개변수로 주어질 때, |
○ 제한 조건
|
○ 입출력 예
○ 입출력 예 설명
|
○ 작성 예시 코드
using System;
public class Solution {
public int solution(string skill, string[] skill_trees) {
int answer = 0;
return answer;
}
}
◎ 나의 문제 풀이
using System.Collections.Generic;
using System.Linq;
public class Solution
{
public int solution(string skill, string[] skill_trees)
{
int answer = 0;
// 검사를 모두 통과했는지 체크할 변수
bool check_flag = true;
// 스킬트리 배열의 항목을 모두 순회
foreach (var str in skill_trees)
{
// FindIndex를 사용하기 위해 CharArray를 리스트형으로 변환
List<char> str_list = str.ToCharArray().ToList();
check_flag = true;
for (int i = 0; i < skill.Length - 1; ++i)
{
// 현재 검사할 요소와 그 다음 비교할 요소를 추출
int prev_skill_idx = str_list.FindIndex(x => x == skill[i]);
int next_skill_idx = str_list.FindIndex(x => x == skill[i + 1]);
// (선행스킬이 다음스킬보다 뒤에있고 && 다음스킬이 존재 하는경우) || (선행스킬이 없으면서 && 다음스킬은 존재하는 경우)
if ((prev_skill_idx > next_skill_idx && next_skill_idx >= 0) || (prev_skill_idx < 0 && next_skill_idx >= 0))
{
check_flag = false;
break;
}
}
// for문의 조건에 필터링 되지 않은경우 answer를 증가
if (check_flag)
{
answer++;
}
}
return answer;
}
}
'프로그래밍 문제 풀이 > C#' 카테고리의 다른 글
[프로그래밍 문제 풀이] 프로그래머스 - 위장 (C#) (0) | 2020.09.10 |
---|---|
[프로그래밍 문제 풀이] 프로그래머스 - 가장 큰 수 (C#) (0) | 2020.09.10 |
[프로그래밍 문제 풀이] 프로그래머스 - 프린터 (C#) (0) | 2020.08.12 |
[프로그래밍 문제 풀이] 프로그래머스 - 다리를 지나는 트럭 (C#) (0) | 2020.08.12 |
[프로그래밍 문제 풀이] 프로그래머스 - 주식가격 (C#) (0) | 2020.08.11 |