2019 카카오 개발자 겨울 인턴십 - 불량 사용자

Updated:

Java

2019 카카오 개발자 겨울 인턴십 - 불량 사용자

문제

문제 출처

접근 방법

코드

import java.util.*;

class Solution {

	static int result, banSize, userSize;
	static boolean[] vis;
	static int[] sel;
	static Set<String> set;
	public static int solution(String[] user_id, String[] banned_id) {
        int answer = 0;
        banSize = banned_id.length;
        userSize = user_id.length;

        vis = new boolean[userSize];
        sel = new int[banSize];
        set = new HashSet<>();		// 선택한

        DFS(0,user_id,banned_id);
        result = set.size();
        return answer = result;
    }

    static void DFS(int lv, String[] user_id, String[] banned_id) {
    	// banned_id를 전부 확인 하였을 때
    	if(lv == banSize) {
    		int[] clone = sel.clone();
    		Arrays.sort(clone);
    		String str = Arrays.toString(clone);	// 인덱스를 배열로 만들어 Set에 저장한다.
    		set.add(str);
    		return;
    	}
    	String curBan = banned_id[lv];
    	next : for(int i = 0; i < userSize; i++) {
    		// 현재 ban에 등록되어 있고, 현재 ban id와 길이가 다르면
    		if(vis[i] || user_id[i].length() != curBan.length())
    			continue;

    		for(int j = 0; j < curBan.length(); j++) {
    			if(curBan.charAt(j) == '*')
    				continue;

    			if(curBan.charAt(j) != user_id[i].charAt(j))
    				continue next;
    		}

    		vis[i] = true;
    		sel[lv] = i;
    		DFS(lv + 1, user_id, banned_id);
    		vis[i] = false;
    	}

    }
}

후기 및 개선할 점

자바 int 배열을 String으로 변환