자바/코딩테스트

[프로그래머스] 스킬트리 - Java(자바)

대전집주인 2024. 4. 2. 15:29
728x90
SMALL

 

문제 이해

  • 선행 스킬 순서 skill이 존재한다. skill_trees 의 순서들이 선행 스킬 순서에 맞게 배웠는지 확인한다.
  • 선행 스킬을 베열로 저장하였다.
  • 스킬트리의 문자열을 앞자리부터 비교한다. 배운 스킬이 선행 스킬에 순서에 맞는지 indexOf로 판단한다.
  • 스킬 배우는 순서를 cnt에 입력하여 스킬트리의 배운 스킬의 순서와 맞는지 비교 그렇지 않다면 break로 내보낸다.
import java.util.*;
class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;

        List<String> skillList = new ArrayList();

        for(int i = 0; i<skill.length(); i++)
            skillList.add(skill.substring(i, i+1));

        for(String str : skill_trees){
            int cnt = 0;
            int check = 0;
            for(int i = 0; i<str.length(); i++){
                String tmp = str.substring(i, i+1);

                if(skillList.indexOf(tmp) > cnt){
                    check = 1;
                    break;
                }

                if(skillList.indexOf(tmp) == cnt){
                    cnt++;
                }
            }

            if(check == 0) answer++;
        }

        return answer;
    }
}

 

 

다른 사람 풀이

  • 스킬트리의 문자열을 스킬 문자열에 맞게 replaceAll 변형시켜서 indexOf가 존재하는지 비교한다.(정규표현식)
import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        ArrayList<String> skillTrees = new ArrayList<String>(Arrays.asList(skill_trees));
        //ArrayList<String> skillTrees = new ArrayList<String>();
        Iterator<String> it = skillTrees.iterator();

        while (it.hasNext()) {
            if (skill.indexOf(it.next().replaceAll("[^" + skill + "]", "")) != 0) {
                it.remove();
            }
        }
        answer = skillTrees.size();
        return answer;
    }
}

 

728x90
LIST