문제설명
선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가
스파크 → 라이트닝 볼트 → 썬더
일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.
위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서
스파크 → 힐링 → 라이트닝 볼트 → 썬더
와 같은 스킬트리는 가능하지만,
썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더
와 같은 스킬트리는 불가능합니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리을 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
제한조건
- 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
- 스킬 순서와 스킬트리는 문자열로 표기합니다.
- 예를 들어, C → B → D 라면 CBD로 표기합니다
- 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
- skill_trees는 길이 1 이상 20 이하인 배열입니다.
- skill_trees의 원소는 스킬을 나타내는 문자열입니다.
- skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.
입출력 예
skill | skill_trees | return |
"CBD" | ["BACDE", "CBADF", "AECB", "BDA"] | 2 |
입출력 예 설명
- BACDE: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
- CBADF: 가능한 스킬트리입니다.
- AECB: 가능한 스킬트리입니다.
- BDA: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다.
문제 풀이
3중 반복문을 사용해서 전체탐색해주었다. 첫 반복문에서 skill_tree전체의 반복을 해주면서 flag와 스킬의 위치값을 표시해줄 idx를 선언해준다. 이후 두번째 반복문에서 스킬하나하나 탐색한다. 스킬하나하나 가져와서 skill.length만큼 반복문을 수행하는데 같은 값이 나오면 해당 문자열 치와 다르면 계속 진행하고 같게되면 idx를 증가시켜 위치값을 한칸씩 오른쪽으로 이동시켜주며 flag가 false가 나오지않는다면 answer에 1을 더해주는 식으로 진행해준다. ㅇㅅㅇ
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
|
package algo;
import java.util.*;
import java.io.*;
public class Main {
public static int solution(String skill, String[] skill_trees) {
int answer = 0;
int idx=0;
//스킬트리 하나씩 가져오기
out:for(int i=0;i<skill_trees.length;i++) {
idx=0;
boolean flag = true;
int temp=0;
// 비교
for(int j=0;j<skill_trees[i].length();j++) {
//스킬과 비교
for(int k=idx;k<skill.length();k++) {
if(skill.charAt(k) == skill_trees[i].charAt(j)){
if(k!=idx){
flag = false;
}else{
idx++;
}
}
}
}
if(flag == true){
answer ++;
}
}
return answer;
}
//문제풀이용 예시
public static void main(String[] args) {
String skill="ABC";
String [] skill_trees= {"X", "OP", "STU"};
System.out.println(solution(skill,skill_trees));
}
}
|
cs |
https://programmers.co.kr/learn/courses/30/lessons/49993
반응형
'Algorithms > Programmers[Java]' 카테고리의 다른 글
[Programmers]영어 끝말잇기(Summer/Winter Coding(~2018))[Java] (0) | 2020.07.20 |
---|---|
[Programmer] 크레인 인형뽑기게임(2019 카카오 개발자 겨울 인턴십)[Java] (0) | 2020.07.17 |
[Programmers][1차] 프렌즈4블록(2018 KAKAO BLIND RECRUITMENT)[Java] (0) | 2020.07.17 |
[Programmers]오픈채팅방(2019 KAKAO BLIND RECRUITMENT)[Java] (2) | 2020.07.15 |
[Programmers] [1차]다트게임(2018 KAKAO BLIND RECRUITMENT)[Java] (0) | 2020.07.14 |