오늘 푼 문제
3. 불량 사용자/ Lv.3 / 시간 : 78분
programmers.co.kr/learn/courses/30/lessons/64064
function solution(user_id, banned_id) {
var answer = 0;
let temp = banned_id.reduce((acc,cur)=>{
let tempList = user_id.reduce((acc2,cur2)=>{
if(cur.length!==cur2.length) return acc2;
for(let j=0;j<cur.length;j++){
if((cur[j]!=="*")&&(cur[j]!==cur2[j])) return acc2;
}
acc2.push(cur2);
return acc2;
},[]);
acc.push(tempList)
return acc;
},[]);
let list = [];
temp.forEach((arr,i)=>{
let target = i? list[i-1] : null;
list[i] = [];
arr.forEach(v=>{
if(target) target.forEach(old=>{
let news = new Set(old)
news.add(v);
if(news.size===(i+1)) list[i].push(news);
});
else list[i].push(new Set([v]));
})
})
answer = new Set(list[list.length-1].map(s=>[...s].sort().reduce((acc,cur)=>acc+cur,""))).size
return answer;
}
문제 풀이 핵심
1. 각 banned_id 별로 매핑 가능한 user_id 들의 배열을 추출
2. user_id 배열들로 중복 없이 생성 가능한 조합의 개수를 구함.
3. 모든 조합을 구하면 최대 8의 8제곱까지 연산이 들어가기 때문에 중간에 set을 사용해서 중복 제거로 불필요한 연산을 줄일 필요가 있다.
'알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 2021 카카오 공채 - 신규 아이디 추천 (0) | 2021.02.19 |
---|---|
[프로그래머스] 2019카카오 겨울 인턴십 - 징검다리 건너기 (0) | 2021.02.09 |
[프로그래머스] 2019카카오 겨울 인턴십 - 크레인 인형뽑기 / 튜플 (0) | 2021.02.04 |
[프로그래머스] 2020카카오 인턴십 - 경주로 건설 (0) | 2021.02.03 |
[프로그래머스] 2020카카오 인턴십 - 보석 쇼핑 (0) | 2021.02.02 |