Problem Solving/프로그래머스
[프로그래머스] 불량 사용자
Libi
2021. 7. 1. 12:52
반응형
https://programmers.co.kr/learn/courses/30/lessons/64064
코딩테스트 연습 - 불량 사용자
개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량
programmers.co.kr
[ 문제풀이 ]
모든 banned_id에 대해서 가능한 user_id를 구해준 후 중복을 제외하고 만들 수 있는 조합의 개수를 구해주면 된다.
import java.util.*;
class Solution {
List<Integer>[] list;
Set<Integer> set;
Set<String> ans;
int answer, ul, bl;
public int solution(String[] user_id, String[] banned_id) {
ul = user_id.length;
bl = banned_id.length;
list = new ArrayList[bl];
for (int i = 0; i < bl; ++i) {
list[i] = new ArrayList<>();
for (int j = 0; j < ul; ++j) {
if (banned_id[i].length() != user_id[j].length()) continue;
boolean vaild = false;
for (int k = 0; k < user_id[j].length(); ++k) {
if (banned_id[i].charAt(k) == '*') continue;
if (banned_id[i].charAt(k) != user_id[j].charAt(k)) {
vaild = true;
break;
}
}
if (!vaild) list[i].add(j);
}
}
set = new HashSet<>();
ans = new HashSet<>();
dfs(0);
return answer;
}
public void dfs(int depth) {
if (depth == bl) {
StringBuilder sb = new StringBuilder();
for (int n : set) {
sb.append(n);
}
if (!ans.contains(sb.toString())) {
ans.add(sb.toString());
answer++;
}
return;
}
for (int s : list[depth]) {
if (!set.contains(s)) {
set.add(s);
dfs(depth + 1);
set.remove(s);
}
}
}
}
반응형