문제
https://programmers.co.kr/learn/courses/30/lessons/92334
풀이
// 입력값
const id_list = ['muzi', 'frodo', 'apeach', 'neo'];
const report = [
'muzi frodo',
'apeach frodo',
'frodo neo',
'muzi neo',
'apeach muzi',
];
const k = 2;
// 풀이
function solution(id_list, report, k) {
const answer = new Array(id_list.length).fill(0);
const report_list = {};
// 불량이용자 : [신고한 유저들] 로 이루어질 맵 생성 (빈 배열 할당)
id_list.map((user) => (report_list[user] = []));
report.map((user) => {
const [user_id, report_id] = user.split(' ');
// user_id 가 없을 때만 추가해서 중복카운트 방지
if (!report_list[report_id].includes(user_id))
report_list[report_id].push(user_id);
});
for (let [key, val] of Object.entries(report_list)) {
// 신고 건수가 k를 넘는 정지대상 이용자
if (val.length >= k) {
// id_list의 유저 인덱스와 동일한 answer 배열 증가
val.map((user) => (answer[id_list.indexOf(user)] += 1));
}
}
return answer;
}
// console.log(solution(id_list, report, k));
- 처음에는 각 유저별로 신고 건수를 표기한 Map 객체를 만들고, value 값이 2 인 key만 모은 다음, report 배열 요소와 비교해 해당 요소에 정지 유저가 포함되어 있으면 증감시키는 방향으로 풀려고 했다.
- Map 객체에서 특정 조건을 만족하는지 확인하는게 좀 어려웠고 반복문을 쓸데없이 많이 돌리는 것 같아 다른 풀이를 참고하게 되었다.
- 내가 생각한 방식은 신고 유저 = [신고한 불량이용자들] 에서 정지 대상 이용자를 포함하고 있으면 정답 배열에서 증감하는 방식이었다. 해당 풀이에서는 불량이용자 = [신고한 유저들] 을 할당해서 이를 세는 방식이었고, 내가 생각한 방식보다 훨씬 간편한 것 같다.
- 내 방식에서는 신고 유저가 신고한 이용자들 중 정지 이용자가 있는지를 다시 한번 파악해야 하는데, 이 접근 방식에서는 신고 누적 건수(배열의 길이)만 확인하면 되기 때문이다.
- 흑흑 문제가 좀 어려웠다, 나중에 다시 풀어봐야지..
'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글
[알고리즘 JS] 프로그래머스 LV.1 소수 찾기 (0) | 2022.07.18 |
---|---|
[알고리즘 JS]백준 17478번: 재귀함수가 뭔가요? (0) | 2022.07.07 |
[알고리즘]백준 2581번: 소수 W_node.js (0) | 2022.06.16 |
[알고리즘]백준 1978번: 소수 찾기 W_node.js (0) | 2022.06.16 |
[알고리즘]백준 10757번: 큰 수 A+B W_node.js (0) | 2022.06.16 |