프로그래머스 Lv. 2 스킬트리 JAVA

YB·2025년 7월 3일

링크텍스트

설명

먼저 skill.indexOf(c)를 사용하여, 현재 문자 c가 선행 스킬 목록인 skill에 포함되어 있는지를 확인하였다.
만약 포함되어 있고, q.poll()로 꺼낸 다음 배워야 할 스킬과 c가 다르다면, 순서가 올바르지 않다고 판단하여 check를 false로 설정하였다.
시간복잡도: O(), 공간복잡도: O()

회독

  • [ x ] 1회
  • [ x ] 2회
  • 3회

JAVA코드

import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        
        Queue<Character> q = new LinkedList<>();
        
        for(int i=0;i<skill_trees.length;i++){
            for(char ch : skill.toCharArray()){
                q.offer(ch);
            }
            
            boolean check = true;
            
            for(int j=0;j<skill_trees[i].length();j++){
                char c = skill_trees[i].charAt(j);
                
                if(skill.indexOf(c)!=-1){ //존재하지 않을때는 스킵
                    if(q.isEmpty() || c!=q.poll()){
                        check = false;
                        break;
                    }
                }
            }
            
            if(check) answer++;
            q.clear();
        }
        
        return answer;
    }
}

다른 사람의 풀이

링크텍스트

정규식

String skill = "CBD";
String cur = "BACDECBD";
cur.replaceAll(skill, ""); // 결과: "BACDE"

String skill = "CBD";
String cur = "BACDE";
cur.replaceAll("[^"+skill+"]", ""); // 결과: "BCD"

String skill = "CBD";
String cur = "CBDAX";
cur.replaceAll("^" + skill, ""); // 결과: "AX"

12.04 코드

class Solution {
        int [] inDegree;
    public int solution(String skill, String[] skill_trees){
        int answer = 0;
        
        for(int i=0;i<skill_trees.length;i++){
            StringBuilder sb = new StringBuilder();
            
            for(char c : skill_trees[i].toCharArray()){
                if(skill.contains(String.valueOf(c))){
                    sb.append(c);
                }
            }
            
            if(skill.startsWith(sb.toString())){
                answer++;
            }
            
        }
        
        return answer;
    }
}
profile
안녕하세요

0개의 댓글