[프로그래머스 - Level 2] 스킬트리 [Java]

노력하는 배짱이·2021년 1월 25일
0
post-thumbnail

문제(링크)

풀이

처음에는 HashMap을 이용해서 index 차이 두고 문제를 풀려고 했으나 코드가 너무 복잡해지고 지저분해져서 빠르게 다른 규칙을 찾았다.

제일먼저 유저들이 만든 스킬트리(skill_trees)에서 skill에 포함되지 않는 문자들은 모두 제외시키고 남은 문자열이 skill 문자열에 포함되는지 확인한다. (이것만 하면 결과가 나오는 줄 알았다..ㅠ)

skill 문자열이 "CBD" 인데 "BD"가 생기는 경우가 존재한다. 이말은 즉, B 전에 C가 선행되어야하는데 위에 말한 것처럼 구현하면 걸러지지 못하는 것이다. 그래서 찾은 것이 String 의 indexOf() 함수이다. indexOf() 함수는 찾는 문자열이 몇번째 위치에 있는지 반환해주는 것인데, 이것이 0이 나와야 올바른 결과인 것이다.

소스

import java.util.*;

class Solution {
	public int count;
	public ArrayList<Character> skills = new ArrayList<Character>();
		
	public int solution(String skill, String[] skill_trees) {
		
		// 1. skill 문자를 제외한 나머지 삭제
		// 2. skill 문자열과 같은지 확인
		
		// 선행 스킬
		for(int i=0; i<skill.length(); i++) {
			skills.add(skill.charAt(i));
		}
		
		StringBuilder sb = new StringBuilder();
		// 스킬트리 하나씩 확인
		for(int i=0; i<skill_trees.length; i++) {
			String str = skill_trees[i];
			
			// 하나하나 skills에 포함되어 있는지
			for(int j=0; j<str.length(); j++) {
				char c = str.charAt(j);
				if(skills.contains(c)) {
					sb.append(c);
				}
			}
            // indexOf는 문자열(skill)에 해당 문자열이 포함되어 있으면 위치를 반환 
			if(skill.indexOf(sb.toString()) == 0) {
				count += 1;
			}
			
			sb.delete(0, sb.length());
		}
		
		return count;
	}
}

결과

0개의 댓글

관련 채용 정보