알고리즘 공부/프로그래머스

프로그래머스 코딩테스트 연습 - Summer/Winter Coding(~2018) - 스킬트리

HRuler 2020. 10. 13. 21:45

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/49993?language=java

 

코딩테스트 연습 - 스킬트리

 

programmers.co.kr

2. 나의 풀이

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        //skill 길이가 1일때 처리
		if(skill.length() == 1) {
			answer = skill_trees.length;
			return answer;
		}
        //스킬트리 배열을 순회
        for(int i = 0; i < skill_trees.length; i = i + 1) {
        	int imsi = 0;
        	//System.out.println(skill_trees[i]);
        	//skill 문자열의 첫 문자열을 제외한 각 문자를 순회
        	for(int j = 1; j < skill.length(); j = j + 1) {
        		//skill 문자열의 기준 문자열이 있는지 확인하고 있을 경우 그 전 문자열의 인덱스보다 큰 인덱스를 갖는지 확인
        		if(skill_trees[i].indexOf(skill.substring(j, j + 1)) != -1 && 
        				skill_trees[i].indexOf(skill.substring(j, j + 1))
        				< skill_trees[i].indexOf(skill.substring(j - 1, j))){
        			break;
        		}else if(skill_trees[i].indexOf(skill.substring(j, j + 1)) != -1 &&
        				skill_trees[i].indexOf(skill.substring(j - 1, j)) == -1) {
        			break;
        		}
        		imsi += 1;
        		if(imsi == skill.length() - 1) {
        			answer += 1;
        		}
        		//System.out.println(answer);
        	}
        }
        return answer;
    }
}

3. 다른 사람 풀이

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