🖇️ 문제 링크
코딩테스트 연습 - 불량 사용자
개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 사용자라는 이름으로 목록을 만들어서 당첨 처리 시 제외하도록 이벤트 당첨자 담당자인 "프로도" 에게 전달하려고 합니다. 이 때 개인정보 보호을 위해 사용자 아이디 중 일부 문자를 '*' 문자로 가려서 전달했습니다.


📝 문제 분석
불량 사용자 목록에 매칭되는 유저들의 조합의 개수를 찾는 문제입니다.
비트마스킹으로 조합 중복 체크를 하고, 정규식을 사용해서 유저 아이디가 패턴과 매칭하는 여부를 판별했습니다.
⌨️ 코드
import java.util.*;
import java.util.regex.*;
class Solution {
int ans = 0;
boolean[] chk = new boolean[1 << 8];
String[] patterns;
public int solution(String[] user_id, String[] banned_id) {
patterns = Arrays.stream(banned_id)
.map(s -> s.replace("*", "."))
.toArray(String[]::new);
solve(0, 0, user_id);
return ans;
}
public void solve(int cnt, int visit, String[] user_id) {
if(cnt == patterns.length) {
if(!chk[visit]) {
chk[visit] = true;
ans++;
}
return;
}
for(int i = 0; i < user_id.length; i++) {
if((visit & (1 << i)) == 0 && user_id[i].matches(patterns[cnt]))
solve(cnt + 1, visit | (1 << i), user_id);
}
}
}
Uploaded by Notion2Tistory v1.1.0