일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- horner algorithm
- 철자검사
- C#
- 프로그래머스
- 스티커 C++
- 파라메트릭 서치
- horner
- 백준
- 통계
- 프로그래머스C#
- cpp
- 너비우선탐색
- 백준 9465
- 문자열
- 확률론
- 9095 C++
- 프로그래머스 c#
- 알고리즘
- 이분탐색
- BFS
- 통계학
- 확률
- dp
- C
- 선형대수학
- C++
- 백준 C#
- 코딩테스트
- 수치해석
- 입출력
- Today
- Total
HOIT_B
[프로그래머스 C#] 스킬트리 본문
문제
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;
}
}
'작고소중한 알고리즘 풀기' 카테고리의 다른 글
[프로그래머스 C#] 나머지 한 점 (0) | 2022.08.02 |
---|---|
[프로그래머스 C#] 완전탐색 > 소수찾기 (0) | 2022.08.01 |
[프로그래머스 C#] 최솟값 만들기 (0) | 2022.07.31 |
[프로그래머스 C#] 피보나치 수 (0) | 2022.07.31 |
[프로그래머스 C#] 프린터 (0) | 2022.07.30 |