programmers/Lv 2

스킬트리

Meluu_ 2024. 6. 28. 19:06

🧫 문제 분석

✔️ 출처

스킬트리 level 2

📖 문제

 

skill 매개변수에는 스킬 순서가 담겨있고 

skill_trees는 각 스킬트리들이 담겨있다. 

 

여기서 핵심은 스킬순서에 있는 모든 스킬이 다 스킬트리에 있을 필요 없고 스킬 순서만 맞으면 가능한 스킬트리라는 것이다.

 


🔅 문제 풀이

import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {        
        HashMap<Character, Integer> map = new HashMap<>();
        int answer = 0, rightSequence = 0;

        // 맵 초기화
        for (int i = 0; i < skill.length(); i++) {
            map.put(skill.charAt(i), i);
        }

		// 각 스킬트리의 스킬 순서를 검증
        for (int i = 0; i < skill_trees.length; i++) {
            boolean flag = true;
            rightSequence = 0;
            for (int j = 0; j < skill_trees[i].length(); j++) {
                char skillName = skill_trees[i].charAt(j);
                int currentSkill = map.getOrDefault(skillName, -1);
				
                // 스킬순서에 없는 것은 넘긴다. 
                if (currentSkill == -1) {
                  continue;
		// 스킬순서에 어긋나면 정상 스킬순서를 0으로, flag를 false로 하고 
                // 해당 스킬트리 반복문을 멈춘다. 
                } else if (rightSequence != currentSkill) {
                    rightSequence = 0;
                    flag = false;
                    break;
                }

                rightSequence++;
            }
			// 스킬순서가 정상적이면 answer++
            if (flag) answer++;
        }


        return answer;
    }
}

 

 

 

처음에는 스킬순서에 있는 모든 스킬이 있어야하는 줄알아서 잘못짰었다.

그 다음에 정규표현식으로 replaceAll 할라했는데 변수를 어떻게 할지 몰라서 넘겼다가 알게되었는데

"[^" + 변수 + "]" 이렇게 하면 되는 거였다. 기억하자

 

다른 사람 풀이를 보니 나랑 비슷한데 배열만 써서 나보다 3배 빠르다. 역시 배열이 최고다..

 

 

❗ 오답노트 / 필요한 지식

  1. 모든 문제는 배열로 처리할 수 있다. 
  2. 정규표현식 "[^" + 변수 + "]"  이런식으로 하면 변수 사용 가능
  3. 문제좀 잘 읽자;

 

'programmers > Lv 2' 카테고리의 다른 글

두 원 사이의 정수 쌍 [자바]  (0) 2025.01.03
요격 시스템 [자바]  (2) 2024.12.30
행렬의 곱셈  (0) 2024.06.27
n^2 배열 자르기  (0) 2024.06.27
H-Index  (0) 2024.06.27