https://programmers.co.kr/learn/courses/30/lessons/49993?language=java
풀이
- 주어진 skill_tree String 배열에 대해서 주어진 skill String 만큼 반복문을 돌면서 탐색한다.
- skill 순서에 따라 검사하는데 선행스킬과 후행스킬의 순서를 고려한다.
- 1) 선행 스킬을 배우지 않고 후행 스킬을 배운 경우 -> 비정상
- 2) 선행 스킬을 후행 스킬 뒤에 배운 경우 -> 비정상
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
// skil의 값들을 skill_tree에서 하나씩 위치 찾기
// 인덱스 값이 이전 것보다 작아져버리면 불가
// 또는 안나오다가 갑자기 나온 경우 불가
for (String skill_tree : skill_trees){
// 없다 -> -1이 중간에 나오면 안됨
int p_idx = -2;
int idx = -2;
int ans = 1; // 정답 가능 여부
// 탐색
char[] skill_arr = skill.toCharArray();
for(int i=0; i<skill_arr.length; i++ ){
idx = skill_tree.indexOf(skill_arr[i]);
// 1)번 케이스 >> 안나오다가 나온경우 (비정상)
if(p_idx == -1 && idx!=-1){
ans=0;
break;
}
// 2)번 케이스 >> 값이 작아졌을 경우 (비정상)
if(idx != -1 && idx <= p_idx ){
ans = 0;
break; // 중단
}
// 값이 커졌을 경우(정상)
p_idx = idx;
} // end for
// 정답 체크
if(ans == 1){
answer++;
}
}
return answer;
}
}
'Archived(CSE Programming) > 알고리즘(Java)' 카테고리의 다른 글
프로그래머스 - 문자열 압축(Java, 2020 카카오) (0) | 2020.10.21 |
---|---|
프로그래머스 - 삼각 달팽이(Java, LV2) (0) | 2020.10.20 |
프로그래머스 - 124 나라의 숫자(Java, LV2) (0) | 2020.10.19 |
프로그래머스 - 경주로 건설(Java, LV3, 2020 카카오) (2) | 2020.10.19 |
프로그래머스 - 방문길이(Java, LV3) (0) | 2020.10.18 |