출처 - https://school.programmers.co.kr/learn/courses/30/lessons/92334
풀이
function solution(id_list, report, k) {
const newRepo = [...new Set(report)]; // report 중복 제거
const banned = []; // 정지 아이디
const reportedCnt = Array(id_list.length).fill(0); // 신고수 [0,0,0,0]
const alert = Array(id_list.length).fill(0); // 메일수 [0,0,0,0]
for (let r of newRepo) {
let a = r.split(" ")[0]; // 유저 ID
let b = r.split(" ")[1]; // 유저가 신고한 ID
let idxB = id_list.indexOf(b); // id_list에서 신고받은 유저의 index 칮기
reportedCnt[idxB] += 1; // 신고받은 유저의 신고수 누적 더하기
// 신고수가 k개 이상인 경우
if (reportedCnt[idxB] >= k) {
// 정지 리스트에 해당 아아디 추가
banned.push(id_list[idxB])
}
}
// 메일
newRepo.map((r, idx) => {
let a = r.split(' ')[0] // 유저 ID
let b = r.split(' ')[1] // 유저가 신고한 ID
// 신고한 ID(b)에 정지된 ID가 있는지 확인
if (banned.indexOf(b) >= 0) {
// 신고한 ID 중에 정지된 ID가 있다면,
// 해당 유저(a)의 id_list에서의 인덱스를 구하고
// mail의 해당 인덱스에 1 더하기
let idx = id_list.indexOf(a);
alert[idx] += 1;
}
})
return alert;
}
Array(n).fill(n) :
n길이의 배열을 n으로 채우겠다. 위의 코드에서는 id_list의 길이만큼 0으로 채워넣었음
for (let i of array){}:
배열을 순회하며 각 요소에 함수를 적용함
위의 코드에서느 a와 b를 만들어 a에는 현재요소를 띄어쓰기를 기준으로 나누어 0번째 인덱스에 유저 id를 할당하고 1번째 인덱스에 신고 당한 유저의 id를 할당함
idxB에는 유저리스트에서 신고받은 유저의 인덱스를 찾은후 그만큼 reportedCnt에 수를 누적
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 Lv.1 - 두개 뽑아서 더하기 (0) | 2024.03.30 |
---|---|
[알고리즘] 프로그래머스 Lv.1 - 추억 점수 (0) | 2024.03.26 |
[알고리즘]프로그래머스 Lv.1 - 시저암호 (0) | 2024.03.22 |
[알고리즘]개인정보수집 유효기간(JS) (0) | 2024.03.12 |
[알고리즘] 프로그래머스 Lv.1 - 이상한 문자 만들기(JS) (0) | 2024.03.11 |