[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/64064
[풀이]
사용자 아이디의 조합을 구한 후(dfs, 불량 사용자 크기 만큼), banned_id 리스트에 해당되면 정답에 추가한다.
중복을 제거하고, 추가한 사용자의 순서를 보장하기 위해 LinkedHashSet을 사용하여 dfs에 넣어준다.
[코드]
import java.util.*;
class Solution {
HashSet<HashSet<String>> ans = new HashSet<>();
public int solution(String[] user_id, String[] banned_id) {
int answer = 0;
dfs(new LinkedHashSet<>(), user_id, banned_id);
answer = ans.size();
return answer;
}
public void dfs(HashSet<String> hs, String[] user_id, String[] banned_id){
//조합 구하기
if(hs.size()==banned_id.length){
if(isBanned(hs, banned_id)){
ans.add(new HashSet<>(hs));//ans.add(hs); -> 틀림
}
return;
}
for(String user:user_id){
if(!hs.contains(user)){
hs.add(user);
dfs(hs, user_id, banned_id);
hs.remove(user);
}
}
}
public boolean isBanned(HashSet<String> hs, String[] banned_id){
//문자열 확인
boolean check;
int idx = 0;
for(String user:hs){
String bannedUser = banned_id[idx++];
if(user.length()!=bannedUser.length()) return false;
for(int i=0; i<bannedUser.length(); i++){
if(bannedUser.charAt(i)=='*') continue;
if(user.charAt(i)!=bannedUser.charAt(i)) return false;
}
}
return true;
}
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[pro] 프로그래머스 level3 118668 코딩 테스트 공부 (Java) - dp (0) | 2022.12.15 |
---|---|
[pro] 프로그래머스 level2 118667 두 큐 합 같게 만들기 (Java) - 큐 (0) | 2022.12.15 |
[boj] 백준 1958 LCS 3 (c++) - DP (0) | 2022.12.13 |
[boj] 백준 6087 레이저 통신 (c++) - BFS (0) | 2022.12.13 |
[boj] 백준 1726 로봇 (c++) - BFS (0) | 2022.12.12 |