728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
1. 정규식 표현을 사용해서 Pattern.matches를 사용해줬다. ('*'을 '.'으로 변경한 뒤 비교)
2. 정규식 표현으로 불량유저를 찾아냈으면 matchUser 리스트에 넣어준다.
3. matchUser 리스트를 ban_user_list에 넣어주고, DFS를 통해 조합을 만든다.
4. 깊이 = 불량유저 수 가 되면 넣어둔 HashSet을 결과 HashSet에 담아주면 된다.
5. result 의 사이즈만큼의 조합이 정답.
전체코드
import java.io.*;
import java.util.*;
import java.util.regex.Pattern;
class Solution {
static ArrayList<ArrayList<String>> ban_user_list = new ArrayList<ArrayList<String>>();
static HashSet<HashSet<String>> result = new HashSet<HashSet<String>>();
public int solution(String[] user_id, String[] banned_id) {
for(String banid : banned_id){
ban_user_list.add(getMatchUserId(banid, user_id));
}
dfs(new HashSet<String>(), 0);
return result.size();
}
static ArrayList<String> getMatchUserId(String ban, String[] user_id){
String pattern = ban.replace("*", ".");
ArrayList<String> matchUser = new ArrayList<String>();
for(String userid : user_id){
if(Pattern.matches(pattern, userid)){
matchUser.add(userid);
}
}
return matchUser;
}
static void dfs(HashSet<String> add, int depth){
if(ban_user_list.size() == depth){
result.add(new HashSet<>(add));
return;
}
for(String userid: ban_user_list.get(depth)){
if(!add.contains(userid)){
add.add(userid);
dfs(add, depth+1);
add.remove(userid);
}
}
}
}
728x90
'코테 > Algorithm' 카테고리의 다른 글
[Programmers] 보석 쇼핑 (JAVA) (2) | 2024.10.24 |
---|---|
[Programmers] 스티커 모으기(2) (JAVA) (0) | 2024.10.18 |
[Programmers] 무인도 여행 (JAVA) (1) | 2024.10.17 |
[Programmers] 숫자 변환하기 (JAVA) (0) | 2024.10.17 |
[Programmers][1차]캐시 (JAVA) (0) | 2024.10.16 |