작성일 : 2024.11.08
불량 사용자 확인 문제
문제 설명
이벤트 응모자들 중 불량 사용자를 찾아내는 문제입니다. 불량 사용자 ID는 일부가 '*'로 가려져 있으며, 이에 매칭되는 실제 사용자 ID의 모든 조합을 찾아야 합니다.
예시
응모자 ID: ["frodo", "fradi", "crodo", "abc123", "frodoc"]
불량 사용자: ["fr*d*", "abc1**"]
가능한 제재 ID 조합:
1. ["frodo", "abc123"]
2. ["fradi", "abc123"]
제한 조건
-
user_id 배열
- 크기: 1 ≤ 크기 ≤ 8
- ID 길이: 1 ≤ 길이 ≤ 8
- 구성: 알파벳 소문자, 숫자
- 중복 없음
-
banned_id 배열
- 크기: 1 ≤ 크기 ≤ user_id 배열 크기
- 구성: 알파벳 소문자, 숫자, '*'
- '*' 문자 최소 1개 포함
해결 코드
function solution(user_id, banned_id) {
let answer = new Set();
const matched = (user_id, banned_id) => {
if (user_id.length != banned_id.length) return false;
for (let chIndex = 0; chIndex < user_id.length; chIndex++) {
if (banned_id[chIndex] != "*" && banned_id[chIndex] != user_id[chIndex]) {
return false;
}
}
return true;
};
const dfs = (level, selected) => {
if (level == banned_id.length) {
answer.add([...selected].sort().join(","));
return;
}
for (let idIndex = 0; idIndex < user_id.length; idIndex++) {
if (
!selected.has(idIndex) &&
matched(user_id[idIndex], banned_id[level])
) {
selected.add(idIndex);
dfs(level + 1, selected);
selected.delete(idIndex);
}
}
};
dfs(0, new Set());
return answer.size;
}