문제


내 풀이코드
public int solution(String skill, String[] skill_trees) { //스킬트리
int answer = 0; //스킬트리 갯수
for(String x : skill_trees){ //skill_trees에 있는 스킬트리 하나씩 뽑아서
String tmp = x;
for(int i = 0; i < x.length();i++){ //스킬트리에서 선행스킬을 제외한 모든 스킬을 없애서 tmp에 넣는다.
String s = x.substring(i,i+1);
if(!skill.contains(s)){
tmp = tmp.replace(s,"");
}
}
if(skill.indexOf(tmp)==0){ //tmp가 선행스킬 순서에 존재하면 스킬트리 갯수에 +1
answer++;
}
}
return answer;
}
이 문제를 보자마자 생각이 났던 게 indexOf였다.
왜냐하면 선행스킬을 제외한 나머지 스킬들을 다 제거해버린 뒤, 선행스킬이 담겨있는 skill에서 indexOf를 사용해서
skill_trees에 있는 요소들을 비교해봤을 때, 존재하면 0이 나올 것이고 존재하지 않으면 1이나 -1이 나올 것이기 때문이다.
예를 들어, skill에 "CBD"가 담겨있고 skiil_trees[0]에 선행스킬을 제외한 나머지 스킬들을 다 제거했을 때, "BD"
skill_trees[1]에 "CB"가 담겨있다고 가정하자
그러면 skill.indexOf를 사용하면 skill_trees[0]은 CBD에서 두번째 index 즉, 1부터 BD가 나오기 때문에 1이 반환될 것이고, skill_trees[1]은 CBD에서 첫번째 index 즉, 0부터 CB가 나오기 때문에 0이 반환될 것이다.
이러한 원리를 알고 코드를 짜면 생각보다 쉽게 풀 수가 있다. 자세한 풀이는 주석에 적어놓았다.
'프로그래머스 > Level 2' 카테고리의 다른 글
| [프로그래머스][Level2][Java] 영어 끝말잇기 (0) | 2022.04.04 |
|---|---|
| [프로그래머스][Level2][Java] n^2배열 자르기 (0) | 2022.04.04 |
| [프로그래머스][Level2][Java] 방문 길이 (0) | 2022.04.01 |
| [프로그래머스][Level2][Java] 가장 큰 수 (0) | 2022.03.25 |
| [프로그래머스][Level2][Java] 타겟 넘버 (0) | 2022.03.25 |