Preparing Coding Test/Programmers L2
[Java/프로그래머스] 스킬트리
weero
2020. 8. 10. 16:49
문제
https://programmers.co.kr/learn/courses/30/lessons/49993
코딩테스트 연습 - 스킬트리
programmers.co.kr
풀이
1. 알파벳 개수만큼의 원소를 가지는 int형 배열 rank
ASCII 코드를 고려했을 때, skill의 각 문자에 해당하는 인덱스에 순서를 저장하게 된다.
skill 안에 없는 알파벳은 자동으로 0으로 저장된다.
2. flags는 skill_trees의 각 문자열 원소들이 규칙을 잘 지켰는지에 대한 boolean 변수다.
- 0일 경우 상관이 없으므로 pass
- pos(1순위부터)와 skill_trees 원소의 문자가 같을 경우 순위인 pos는 +1
- skill에 있는 알파벳이면서 pos가 다른 경우(순위가 틀린 경우) flag는 false가 되고 for문에서 빠져나온다.
코드
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
int[] rank = new int[26];
for(int i=0; i<skill.length(); i++){
int idx = skill.charAt(i)-'A';
rank[idx] = i+1;
}
for(int i=0; i<skill_trees.length; i++){
int pos = 1;
boolean flag = true;
for(int j=0; j<skill_trees[i].length(); j++){
if(rank[skill_trees[i].charAt(j)-'A']==0){
continue;
}else if(rank[skill_trees[i].charAt(j)-'A']==pos){
pos++;
continue;
}else{
flag = false;
break;
}
}
if(flag==true)
answer++;
}
return answer;
}
}