-
[프로그래머스]불량사용자_JAVA알고리즘문제풀이/프로그래머스 2022. 2. 1. 16:56
--문제--
https://programmers.co.kr/learn/courses/30/lessons/64064
코딩테스트 연습 - 불량 사용자
개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량
programmers.co.kr
--문제접근--
처음에 문제를 봤을 때 조합을 통해서 풀어보는 것을 생각하였습니다.
고려해야할 점들은 불량사용자들에 해당 될 수 있는 ID들을 모두 추출하는 과정이 필요하는것이였고, 이렇게 추출한 ID들을 어떻게 조합을 고려할 것인가 였습니다.
저는 조합을 그대로 적용하여 풀었는데 조합을 한 이후 중복을 어떻게 해결할지 고민하였는데 이에 대한 해결법은 Hash를 사용하여 해결하였습니다.
--코드--
package Level3; import java.awt.List; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; public class 불량사용자 { static ArrayList<Integer>[] Combination; static boolean[] CheckCombination; static HashSet<String> answer; public static void main(String[] args) { String[] user_id= {"frodo", "fradi", "crodo", "abc123", "frodoc"}; String[] banned_id= {"fr*d*", "abc1**"}; System.out.println(solution(user_id,banned_id)); } private static int solution(String[] user_id, String[] banned_id) { answer=new HashSet<>(); int ban_length=banned_id.length; int user_length=user_id.length; CheckCombination=new boolean[user_length]; Combination=new ArrayList[ban_length]; for(int i=0;i<ban_length;i++) { Combination[i]=new ArrayList<Integer>(); } for(int i=0;i<ban_length;i++) { int banIdLength=banned_id[i].length(); for(int j=0;j<user_length;j++) { if(banIdLength!=user_id[j].length())continue; boolean CheckSuccess=true; for(int k=0;k<banIdLength;k++) { if(banned_id[i].charAt(k)=='*')continue; if(banned_id[i].charAt(k)!=user_id[j].charAt(k)) { CheckSuccess=false; break; } } if(CheckSuccess) { Combination[i].add(j); } } } DFS(0,ban_length,0,banned_id); return answer.size(); } private static void DFS(int idx, int Goal,int start, String[] banned_id) { if(idx==Goal) { String temp=""; for(int i=0;i<CheckCombination.length;i++) { if(CheckCombination[i])temp+=i; } answer.add(temp); return; } for(int j=0;j<Combination[idx].size();j++) { int temp_index=Combination[idx].get(j); if(!CheckCombination[temp_index]) { CheckCombination[temp_index]=true; DFS(idx+1,Goal,start+1,banned_id); CheckCombination[temp_index]=false; } } } }
'알고리즘문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]표 편집 (0) 2022.03.26 [프로그래머스]단체사진찍기_Java (0) 2022.03.19 [프로그래머스]카드짝맞추기_Java (0) 2021.11.26 [프로그래머스]징검다리건너기_Java (0) 2021.11.25 [프로그래머스]경주로건설_Java (0) 2021.11.25