배운 것, 유의할 것
객체를 사용한 문제 풀이
문제 자체는 이해안되는 점도, 구현의 어려운 점도 없었다. 객체를 사용해서 풀어서 뿌듯
배열에서 중복 값 삭제
const array = [1, 2, 3, 3, 4, 4, 5];
const set = new Set(array);
const newArray = [...set]
객체에서 값만 뽑아 배열로
const obj = {
a:1,
b:2,
c:3,
d:4,
}
Object.valuse(obj) // [1, 2, 3, 4]
정답코드
function solution(id_list, report, k) {
// 유저가 받은 결과 메일 수
var answer = [];
// 동일인이 같은 유저를 여러번 신고해도 중복되지 않으므로 중복 제거
report = new Set(report);
report = [...report]
// 신고한 유저를 키값으로 신고당한 유저를 배열로 갖는 객체
const keyReporter = {};
// 유저별 신고당한 횟수를 나타내는 객체
const keyReported = {}
// 유저별 결과 메일 받을 수를 나타내는 객체
const userReportedCount = {};
// 각 객체별로 키와 기본값을 생성해줌
for(let i = 0; i < id_list.length; i++){
keyReporter[id_list[i]] = [];
keyReported[id_list[i]] = 0;
userReportedCount[id_list[i]] = 0;
}
// 신고현황 자료를 통해 신고한 사람이 누구를 신고했는지, 신고당한 유저의 횟수 증가
report.forEach(v=>{
v = v.split(' ')
keyReporter[v[0]].push(v[1])
keyReported[v[1]] += 1;
})
// 신고당한 횟수를 나타내는 객체를 순회하며 k번 이상인 경우 정지먹는 유저를 배열에 보관
const suspendedUsers = [];
for(let i = 0; i <id_list.length; i++){
if(keyReported[id_list[i]] >= k){
suspendedUsers.push(id_list[i])
}
}
// 각 유저별로
for(let i = 0; i < id_list.length; i++){
// 받을 결과 메일의 수
let count = 0;
// 신고한 유저중에 정지된 유저가 있으면 받을 결과 메일의 수++
for(let j = 0; j < suspendedUsers.length; j++){
if(keyReporter[id_list[i]].includes(suspendedUsers[j])){
count++
}
}
// 유저가 통보받는 횟수 값 설정
userReportedCount[id_list[i]] += count
}
// 객체에서 값만 뽑아 배열로 생성
answer = Object.values(userReportedCount);
// 정답 반환
return answer;
}
'알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 level 2 - 미로 탈출(Javascript) (0) | 2023.11.10 |
---|---|
프로그래머스 level 2 - k진수에서 소수 개수 구하기(Javascript) (0) | 2023.11.07 |
프로그래머스 level 2 - 두 큐 합 같게 만들기(Javascript) (0) | 2023.11.07 |
프로그래머스 level 2 - 마법의 엘리베이터(Javascript) (0) | 2023.11.06 |
프로그래머스 level 2 - 리코쳇 로봇(Javascript) (1) | 2023.11.02 |