GaGe

[프로그래머스] 스킬트리 - java 본문

알고리즘/[2020] 프로그래머스

[프로그래머스] 스킬트리 - java

Sorrel 2020. 4. 29. 16:11
class Solution {
    public int solution(String skill, String[] skill_trees) {
	    int answer = skill_trees.length;
        int beforeIndex=0, currentIndex =0 ;
        
        for(int i = 0; i <skill_trees.length ; i++){
            beforeIndex = skill_trees[i].indexOf(skill.charAt(0));
            for(int j = 1; j<skill.length();j++){
                currentIndex = skill_trees[i].indexOf(skill.charAt(j));
                if((currentIndex!=-1 && beforeIndex>currentIndex)||(currentIndex!=-1&&beforeIndex==-1)){
                    answer--;
                    break;
                }
                beforeIndex=currentIndex;
            }
        }
        return answer;
}
}

코드가 계속 복잡해지는 느낌이 들어서 다른 코드를 보고 참고했다. 오래 걸려 푸는 것도 안 좋다 해서 다른 분의 코드를 보고 바로 이해했다.

<참고한 코드>

https://blog.naver.com/yongyos/221572139348

 

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

문제 설명선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.예를 들어 선행 스킬 ...

blog.naver.com

아래는 실패했지만 코드 도출과정들. (역순)

import java.util.ArrayList;
class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        //main idea : C앞에 B와 D가 없으면, B앞에 D가 없으면 가능
        ArrayList<String> skills = new ArrayList<>();
        
        for(int j =0; j<skill.length(); j++){
            skills.add(Character.toString(skill.charAt(j))); //toString 해주는 이유는 contains 함수 사용위해
        }
        
        
        
        for(int i =0 ; i<skill_trees.length; i++){ //i는 스킬트리의 단어 하나하나 체크
            System.out.println("현재의 단어 : "+skill_trees[i]);
            ArrayList<Integer> indexNum = new ArrayList<>();
            boolean flag = false;
            for(int k = 0 ; k<skills.size(); k++){ //k는 skill 하나하나
                if(skill_trees[i].contains(skills.get(k))){ //contains는 String은 String만 비교
                    int num = skill_trees[i].indexOf(skills.get(k));
                    System.out.println(num);
                    for(int q = 0 ; q<num ; q++){
                        if(Character.toString(skill_trees[i].charAt(q)).equals(skills.get(k+1))){
                            flag=true;
                            System.out.println(skill_trees[i].charAt(q)+" 발견");
                            break;
                        }
                    }
                    if(flag==true)
                        break;
                }
                break;
            }
            if(flag==false)
                answer++;
            System.out.println("현재의 answer : "+answer);
        }
        return answer;
    }
}

import java.util.ArrayList;
class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        //main idea : C앞에 B와 D가 없으면, B앞에 D가 없으면 가능
        ArrayList<String> skills = new ArrayList<>();
        
        for(int j =0; j<skill.length(); j++){
            skills.add(Character.toString(skill.charAt(j))); //toString 해주는 이유는 contains 함수 사용위해
        }
        
        
        
        for(int i =0 ; i<skill_trees.length; i++){ //스킬트리의 단어 하나하나 체크
            System.out.println(skill_trees[i]);
            ArrayList<Integer> indexNum = new ArrayList<>();
            for(int k = 0 ; k<skills.size(); k++){
                if(skill_trees[i].contains(skills.get(k))){ //contains는 String은 String만 비교됨
                    indexNum.add(skill_trees[i].indexOf(skills.get(k)));
                }
            }
            
            
            
            
            
            
            
            // System.out.println(indexNum);
            // for(int q = 0; q<indexNum.size(); q++){
            //     if(q==indexNum.size()-1){
            //         answer++;
            //         break;
            //     }
            //     if(indexNum.get(q)>indexNum.get(q+1)||){
            //         System.out.println("스킬트리오류");
            //         break;
            //     }
            // }
            System.out.println(answer);
        }
        return answer;
    }
}

import java.util.ArrayList;
class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        //main idea : C앞에 B와 D가 없으면, B앞에 D가 없으면 가능
        ArrayList<String> skills = new ArrayList<>();
        for(int j =0; j<skill.length(); j++){
            skills.add(Character.toString(skill.charAt(j)));
        }
        
        
        
        for(int i =0 ; i<skill_trees.length; i++){ //스킬트리의 단어 하나하나 체크
            int num = 0;
            System.out.println(skill_trees[i]);
            for(int k = 0 ; k<skills.size(); k++){
                if(skill_trees[i].contains(skills.get(k))){
                    System.out.println(skills.get(k)+"포함");
                }
                else
                    System.out.println(skills.get(k)+"불포함");
            }
            
        }
        return answer;
    }
}

위 코드의 출력결과

import java.util.ArrayList;
class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        //main idea : C앞에 B와 D가 없으면, B앞에 D가 없으면 가능
        ArrayList<Character> skills = new ArrayList<>();
        for(int j =0; j<skill.length(); j++){
            skills.add(skill.charAt(j));
        }
        for(int i =0 ; i<skill_trees.length; i++){
            System.out.println(skill_tress[i]);
            
        }
        return answer;
    }
}
Comments