[プログラマー-レベル2]スキルツリー[Java]


提问(链接)


に答える


最初はHashMapを利用してインデックスの違いの問題を解決しようとしましたが、コードが複雑で乱雑になり、すぐに異なるルールが見つかりました.
まずプレイヤーが作成したスキルツリー(skill trees)で、スキルに含まれていない文字をすべて除外し、残りの文字列がskill文字列に含まれているかどうかを確認します.△これさえやれば結果が出ると思っていたのに…ㅠ
skill文字列は「CBD」であるが、「BD」が発生する場合もある.この言葉の意味は、Bの前にCがあるべきで、前述したように、実現したらフィルタリングできないということです.そこで見つけたのはStringのindexOf()関数です.indexOf()関数は、検索する文字列がいくつかの場所にあることを返します.0が正しい結果になるのは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;
	}
}

結果