https://school.programmers.co.kr/learn/courses/30/lessons/49993#fn1
import java.util.*;
class Solution {
char[] skills;
public int solution(String skill, String[] skill_trees) {
skills = skill.toCharArray();
//skill안 문자를 포함하지 않은 경우 처리
String regex = "[^"+ skill + "]";
int answer = 0;
for(String s : skill_trees){
String tmp = s.replaceAll(regex, ""); //스킬 트리에 해당하는 문자만 남겨놓고
if(tmp.equals("")){
answer++;
continue;
}
if(isCorrect(tmp))
answer++;
}
return answer;
}
private boolean isCorrect(String tmp) {
int idx = 0;
for(char s : tmp.toCharArray()){
if(skills[idx] == s){
idx++;
continue;
}
return false;
}
return true;
}
}
💡 정규식
풀이
처음엔 skill을 쪼갠 다음 정규식 + matches 로 해결하려고 했음
But 예외 (CBD인 경우, C 나 CB까지만 포함해도 카운팅 해야 되는데 얘가 불가능
>> 그렇다고 ?C ?B ?D를 하자니.. CD도 허용할 수 있어서 안됨
>> 문자를 전부 비교하자니 너무 많고,,, 스킬에 해당하지 않는 문자까지 섞여서 처리가 어려움
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
char[] st = skill.toCharArray();
StringBuilder sb = new StringBuilder(".*");
for(char s : st){
sb.append(s).append(".*");
}
String rg = sb.toString(); //".*C.*B.*D.*" REGEX 생성 (순서 중요)
int answer = 0;
for(String sk : skill_trees){
if(sk.matches(rg)){
System.out.println(sk);
answer++;
}
}
return answer;
}
}
💡 먼저, skill에 해당없는 문자를 먼저 지워주고 → 스킬 트리 구성 문자만 남았을 때 (=C, B, D), 순서가 맞는지 비교
skill에 해당하는 문자를 포함하지 않는 경우 REGEX >> "\[^CBD\]"
'Algorithm > Programmars' 카테고리의 다른 글
[JAVA] 숫자 변환하기 - 프로그래머스[Lv.2] (0) | 2024.02.15 |
---|---|
[JAVA] 방문 길이 - 프로그래머스[Lv.2] (1) | 2024.02.09 |
[JAVA] 하노이의 탑 - 프로그래머스[Lv.1] (1) | 2024.02.08 |
[JAVA] 124 나라의 숫자 - 프로그래머스[Lv.2] (0) | 2024.02.06 |
[SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 - 프로그래머스[Lv.3] (1) | 2024.01.31 |