https://school.programmers.co.kr/learn/courses/30/lessons/64064
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제같은경우 이중 HashSet을 사용하여 중복되는 제재아이디들을 제거했습니다.
문제에서 HashSet<String> 을 사용하여 "frodo", "abc123", 이렇게 직접 아이디를 넣었는데,
이렇게하지않고 bitmasking을 사용하는것이 가장 빠른 속도를 나타낼 것 같습니다.
인덱스(0,1,2,3) 이렇게 진행하는것도 가능합니다.
기억해야할점들입니다.
첫번째, 이중 HashSet (Double HashSet) 을 사용해도 똑같이 중복제거가 가능합니다.
- HashSet을 이중으로 이렇게 사용하여도 HashSet값을 중복체크하여 걸러내어 쉽게 사용할 수 있습니다.
HashSet<HashSet<String>> hashset = new HashSet<>();
두번째, 조합, 순열 구하는 알고리즘을 기억합니다.
항상 조합구하는 공식에서 종료지점에 return ; 으로 종료를 해줘야합니다. 그렇지 않으면 아래까지 내려가 indexoutofbound 에러가 뜹니다.
if(r == 0){ HashSet<String> hashsettemp = new HashSet<String>(); int cnt = 0; for(int i=0;i<User_id.length;i++){ if(visited[i] == true){ hashsettemp.add(User_id[i]); } } hashset.add(hashsettemp); return ; }else{
코드입니다.
import java.util.Map.*; import java.util.*; class Solution { HashSet<HashSet<String>> hashset = new HashSet<>(); boolean[] visited; String[] User_id; String[] Banned_id; int answer = 0; public int solution(String[] user_id, String[] banned_id) { User_id = user_id; Banned_id = banned_id; visited = new boolean[user_id.length]; getCombination(0, 0, banned_id.length); Iterator iter = hashset.iterator(); return hashset.size(); } public void getCombination(int start, int banned_id_index, int r){ if(r == 0){ HashSet<String> hashsettemp = new HashSet<String>(); int cnt = 0; for(int i=0;i<User_id.length;i++){ if(visited[i] == true){ hashsettemp.add(User_id[i]); } } hashset.add(hashsettemp); return ; }else{ for(int i=0; i<User_id.length;i++){ if(visited[i] == true) continue; if(checkword(User_id[i], Banned_id[banned_id_index])){ visited[i] = true; getCombination(start, banned_id_index+1, r-1); visited[i] = false; } } } } public boolean checkword(String user_id, String banned_id){ if(banned_id.length() != user_id.length()){ return false; } for(int i=0;i<banned_id.length();i++){ if(banned_id.charAt(i) == '*') continue; else{ if(banned_id.charAt(i) == user_id.charAt(i)){ }else{ return false; } } } return true; } }
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[카카오 기출 문제]이모티콘 할인행사 - 레벨 2, 중복순열 + 구현 (0) | 2023.01.07 |
---|---|
[카카오 기출 문제]블록 이동하기 - 레벨 3, BFS (1) | 2023.01.06 |
[카카오 기출 문제]자물쇠와 열쇠- 레벨 3, 구현 (0) | 2022.11.23 |
[카카오 기출 문제]합승 택시 요금- 레벨 3, 다익스트라 + 완전탐색 + 아이디어 + 그래프 (0) | 2022.11.17 |
[카카오 기출 문제]광고 삽입- 레벨 3, 아이디어 + 윈도우 슬라이딩 (0) | 2022.11.15 |