Skip to content

Commit f2cad36

Browse files
committed
[Week14] PGS 64064: 불량사용자
1 parent d0de3e8 commit f2cad36

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import java.util.*;
2+
import java.util.regex.*;
3+
4+
class Solution {
5+
6+
HashSet<HashSet<String>> finalResult = new HashSet<>();
7+
boolean[] visited;
8+
9+
public int solution(String[] user_id, String[] banned_id) {
10+
visited = new boolean[user_id.length];
11+
12+
// 패턴 전처리 (* -> .)
13+
for (int i = 0; i < banned_id.length; i++) {
14+
banned_id[i] = banned_id[i].replace("*", ".");
15+
}
16+
17+
// 탐색 시작 (0번 패턴부터 채우기 시작)
18+
backtrack(0, user_id, banned_id, new HashSet<>());
19+
20+
return finalResult.size();
21+
}
22+
23+
public void backtrack(int b_idx, String[] user_id, String[] banned_id, HashSet<String> currentSet) {
24+
// 모든 제재 대상을 다 정했다면 종료
25+
if (b_idx == banned_id.length) {
26+
finalResult.add(new HashSet<>(currentSet)); // 현재 조합 저장
27+
return;
28+
}
29+
30+
for (int i = 0; i < user_id.length; i++) {
31+
// 1. 이미 사용 중인 유저면 패스
32+
if (visited[i]) continue;
33+
34+
// 2. 패턴 매칭 확인
35+
if (Pattern.matches(banned_id[b_idx], user_id[i])) {
36+
visited[i] = true; // 선택
37+
currentSet.add(user_id[i]);
38+
39+
backtrack(b_idx + 1, user_id, banned_id, currentSet); // 다음 칸 채우러 가기
40+
41+
currentSet.remove(user_id[i]); // 복구 (백트래킹 핵심)
42+
visited[i] = false;
43+
}
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)