본문 바로가기
Preparing Coding Test/Programmers L2

[Java/프로그래머스] 스킬트리

by weero 2020. 8. 10.

문제

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;
    }
}