mingg IT

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

코딩테스트

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

mingg123 2021. 4. 17. 16:49

programmers.co.kr/learn/courses/30/lessons/49993

 

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

 

programmers.co.kr

 

1차 시도 (실패)

class Solution {
    public int solution(String skill, String[] skill_trees) {
       int answer = 0;
		String [] skillArray = skill.split("");
		for(int i = 0; i < skill_trees.length; i++) {
			boolean flag = true;
			boolean realflag = true;
			int idx = 0;
			for(int j = 0; j < skillArray.length; j++) {
				String targetStr = skillArray[j];
				String [] tempSkillTreeArray = skill_trees[i].split("");
				for(int z = 0 ; z < tempSkillTreeArray.length; z++) {
					//처음 문자가 배열에 존재하지 않는경우
					if(j == 0 && z == tempSkillTreeArray.length -1 && !targetStr.equals(tempSkillTreeArray[z])) {
						realflag = false;
					}
					else if(targetStr.equals(tempSkillTreeArray[z])) {
						if(flag == false) {realflag = false;}
						if(idx == 0) {
							idx = z;
							break;
						} else {
							if(idx < z ) {
								idx = z;
								break;
							} else {
								realflag = false;
								break;
							}
						}
					} else if(z == tempSkillTreeArray.length -1 && !targetStr.equals(tempSkillTreeArray)) {
						flag = false;

					}
				}


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

경우의 수를 처음 스킬을 배우지 않았으면 -> false 반환 

 

배운 스킬의 인덱스를 찾고 인덱스가 더 작으면 스킬 배우는 순서에 맞지 않음으로 -> false반환 

 

1차 코드 실패 이유 : 테스트 케이스 추가 시 잘못 입력함.. 살다살다 이런 이유도 있구나.

 

예를 들어 스킬은 "CB"이고 스킬 트리는 {"A", "D"} 이면 1을 반환해야하는데 0을 반환하도록 했다. 

 

 

 

2차 코드 (성공)

class Solution {
    public int solution(String skill, String[] skill_trees) {
		int answer = 0;
		String [] skillArray = skill.split("");
		for(int i = 0; i < skill_trees.length; i++) {
			boolean flag = true;
			boolean realflag = true;
			int idx = 0;
			for(int j = 0; j < skillArray.length; j++) {
				String targetStr = skillArray[j];
				String [] tempSkillTreeArray = skill_trees[i].split("");
				for(int z = 0 ; z < tempSkillTreeArray.length; z++) {
					 if(targetStr.equals(tempSkillTreeArray[z])) {
						if(flag == false ) {realflag = false;}
						if(idx == 0) {
							idx = z;
							break;
						} else {
							if(idx < z ) {
								idx = z;
								break;
							} else {
								realflag = false;
								break;
							}
						}
					} else if(z == tempSkillTreeArray.length -1 && !targetStr.equals(tempSkillTreeArray)) {
						flag = false;

					}
				}


			}
			if(realflag) answer ++;
		}
		return answer;
    }
}
Comments