[Programmers] 스킬트리 - 서머코딩/윈터코딩(~2018)

동민·2021년 3월 11일
import java.util.ArrayList;

// 스킬트리 - 서머코딩/윈터코딩(~2018)
public class SkillTree {
	public int solution(String skill, String[] skill_trees) {
		
		int answer = 0;
		ArrayList<String> skillList = new ArrayList<>(); // 스킬 순서를 한 글자씩 String으로 저장할 리스트

		for (char ele : skill.toCharArray()) {
			skillList.add(ele + "");
		}

		for (int i = 0; i < skill_trees.length; i++) {

			ArrayList<String> tempList = new ArrayList<>(); // skill_trees[] 배열의 원소 하나씩을 한 글자씩 String으로 저장할 리스트. ex) skill_trees[0] 일 때, B A C D E 저장
			
			for (char ele : skill_trees[i].toCharArray()) {
				tempList.add(ele + "");
			}
			tempList.retainAll(skillList); // tempList에서 skillList와 동일한 원소를 제외하고 모두 제거
			
			int count = 0;
			for (int j = 0; j < tempList.size(); j++) {
				if (tempList.get(j).equals(skillList.get(j))) { // tempList와 skillList의 각 인덱스 끼리 비교하여 같으면 count 증가. for문은 tempList.size() 까지만 실행 
					count++;
				}
			}
			if (count == tempList.size()) { // count와 tempList.size()가 같으면 올바른 스킬트리 이므로 answer를 증가 시킴
				answer++;
			}
		}
		return answer;
	}

	public static void main(String[] args) {

		SkillTree s = new SkillTree();

		String[] skill_trees = { "BACDE", "CBADF", "AECB", "BDA", "BACE", "AE" }; // {불가능, 가능, 가능, 불가능, 불가능, 가능} = 3;  "AE" 와 같이 CBD가 아예 포함되지 않은 경우도 '가능'하도록 처리해야함

		System.out.println(s.solution("CBD", skill_trees));
	}
}
str = str.replaceAll("[^0-9]", ""); : 0 ~ 9 가 아닌 문자(숫자가 아닌 문자)""로 치환. 즉 숫자만 추출
str = str.replaceAll("[0-9]", ""); : 0 ~ 9 숫자를 ""로 치환. 즉 문자만 추출(메타 문자열에서 ^은 not을 의미)
"[a-zA-Z]"
list1.retainAll(list2) : 두 리스트(List)에서 동일한 원소를 제외하고 나머지 원소를 list1에서 모두 제거
list1.removeAll(list2) : 두 리스트(List)에서 동일한 원소를 list1에서 모두 제거
profile
BE Developer

0개의 댓글