스킬트리

유태형·2022년 2월 15일
0

문제

문제 분석

스킬트리에 있는 스킬들의 순서가 올바른지 선행 관계를 확인 하는 문제이다.




풀이

한 문자씩 접근

skill에서 한문자 skill_trees[i]에서 한문자씩 비교하며 skill에 없는 문자는 건너뛰고 있으면 순서를 비교하는 로직을 구현했었다.

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;

        for(String skill_tree : skill_trees){
            int skill_index = 0;
            boolean right_skill = true;

            for(char now : skill_tree.toCharArray()){
                int now_index = skill.indexOf(now);

                if(now_index == -1)
                    continue;

                if(now_index != skill_index){
                    right_skill = false;
                    break;
                }

                skill_index++;
            }

            if(right_skill)
                answer++;
        }
        return answer;
    }
}

정규표현식

정규표현식으로 스킬트리를 비교하는 로직이 있어서 참고했다.

replaceAll("[^" + skill + "]", "")

skill에 없는 문자들을 공백으로 수정(삭제)하는 정규표현식이다.

if (skill.indexOf(it.next().replaceAll("[^" + skill + "]", "")) != 0) {
           it.remove();
        }

skill에 없는 문자들은 삭제되었으므로 skill에 있는 문자들이 순서에 맞게 배치되었는지 확인하고 순서가 일치하지 않으면 삭제 한다.

answer = skillTrees.size();

올바르게 찍힌 스킬트리는 배열에 남은 스킬트리들 뿐




코드

import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = -1;
        ArrayList<String> skillTrees = new ArrayList<String>(Arrays.asList(skill_trees));
        Iterator<String> it = skillTrees.iterator();
        
        while(it.hasNext())
            if(skill.indexOf(it.next().replaceAll("[^"+skill+"]","")) !=0) //1.skill에 없는 문자 삭제
                it.remove(); //2. skill에 있는 문자들 순서 확인
            
        
        answer = skillTrees.size(); //리스트에 남은 스킬트리들
        return answer;
    }
}



GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%EC%9E%90%EB%B0%94/Level2/%EC%8A%A4%ED%82%AC%ED%8A%B8%EB%A6%AC.java

profile
오늘도 내일도 화이팅!

0개의 댓글

관련 채용 정보