[프로그래머스/자바스크립트(JavaScript)] 불량 사용자
https://programmers.co.kr/learn/courses/30/lessons/64064?language=javascript
문제 풀이 ✍️
주어진 user_id
배열을 이용하여 모든 순열을 구해줍니다.
조합을 구할 경우 순서를 따지기 때문에 X
해당 순열들과 banned_id
를 한 글자씩 비교하며 정답 배열에 넣어줍니다.
여기서 Set
을 이용해야 합니다.
순열을 사용할 경우
["*rodo", "*rodo", "******"]
구조는
["frodo", "crodo", "frodoc"]
["crodo", "frodo", "frodoc"]
위 2가지 경우를 모두 포함 시키기 때문에 중복되는 값이
결과 배열에 들어가기 때문입니다.
따라서 정답 배열을 정렬 후 join
을 통해 "frodocrodofrodoc" 형식으로 바꾼뒤
Set
에 담아주면 알아서 중복을 걸러줍니다.
function solution(user_id, banned_id) {
// 순열
const permutation = (arr, selectNum) => {
let result = [];
if (selectNum === 1) return arr.map((item) => [item]);
arr.forEach((num, curIndex, array) => {
const fixed = num;
const restArr = array.filter((item, index) => curIndex !== index);
const restPermutation = permutation(restArr, selectNum - 1);
const fixedPermutation = restPermutation.map((item) => [fixed, ...item]);
result.push(...fixedPermutation);
});
return result;
};
const check = (users) => {
for (let i = 0; i < banned_id.length; i++) {
if (users[i].length !== banned_id[i].length) return false;
else {
for (let j = 0; j < users[i].length; j++) {
if (banned_id[i][j] === "*") continue;
if (users[i][j] !== banned_id[i][j]) return false;
}
}
}
return true;
};
const userSet = permutation(user_id, banned_id.length);
// set 사용 중복 제거
const results = new Set([]);
userSet.forEach((users) => {
if (check(users)) {
results.add(users.sort().join(""));
}
});
return results.size;
}
Author And Source
이 문제에 관하여([프로그래머스/자바스크립트(JavaScript)] 불량 사용자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyoung-jnn/프로그래머스자바스크립트JavaScript-불량-사용자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)