[프로그래머스-Level 1] [JavaScript] 신고 결과 받기 - 해시 사용
2022. 12. 5. 14:54ㆍ알고리즘/프로그래머스 알고리즘 공부
반응형
[문제]
2022 KAKAO BLIND RECRUITMENT 문제입니다.
신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려고 합니다. 그 시스템은 아래와 같습니다.
1) 각 유저는 한 번에 한 명의 유저를 신고할 수 있고 제한 없이 다른 사용자를 계속 신고 가능하지만 동일한 사용자에 대한 신고 횟수는 1회로 간주함
2) k번 이상 신고된 유저는 게시판 이용 정지되고, 해당 유저를 신고한 모든 사용자에게 정지되었다는 메일을 발송하는데 유저가 신고한 모든 내용 취합하여 마지막에 정지 메일을 발송하는 방식
유저 ID | 신고한 ID | 설명 |
"muzi" | "frodo" | "muzi"가 "frodo"를 신고 |
"apeach" | "frodo" | "apeach"가 "frodo"를 신고 |
"frodo" | "neo" | "frodo"가 "neo"를 신고 |
"muzi" | "neo" | "muzi"가 "neo"를 신고 |
"apeach" | "muzi" | "apeach"가 "muzi"를 신고 |
[알고리즘]
해시(Hash) 형태를 사용해야 하며 key: value 값 형식을 가진 객체나 Map을 사용하면 됩니다.
[풀이]
풀이는 아래와 같습니다.
1) 먼저 변수를 선언해줍니다.
2) id_list의 forEach를 사용하여 report_list와 count_list를 각 key의 value 값을 초기화 해줍니다.
3) report id가 없다면 report_list[user_id]에 포함시킵니다.
4) count_list를 업데이트합니다.
5) count_list의 키 값 반복문을 돌려서 k값 이상이면 answer 배열에 추가해줍니다.
function solution(id_list, report, k) {
// 변수 선언
const answer = [];
const report_list = {};
const count_list = {};
// report_list, count_list 초기화
id_list.forEach(user_id => {
report_list[user_id] = [];
count_list[user_id] = 0;
});
// 리포트 리스트 체크
report.forEach(rec => {
const [user_id, report_id] = rec.split(" ");
if (report_list[user_id].includes(report_id) === false) {
report_list[user_id].push(report_id);
}
});
// 카운트 리스트 업데이트
for (const key in report_list) {
for (const report_id of report_list[key]) {
count_list[report_id] += 1;
}
}
// k보다 크면 count에 업데이트
for (const key in report_list) {
var count = 0;
for (const report_id of report_list[key]) {
if (count_list[report_id] >= k) {
count++;
}
}
// answer 배열에 넣음.
answer.push(count);
}
return answer;
}
반응형
'알고리즘 > 프로그래머스 알고리즘 공부' 카테고리의 다른 글
[프로그래머스-Level 0] [JavaScript] 한 번만 등장한 문자 - 객체(Object) 활용 (0) | 2023.01.17 |
---|---|
[프로그래머스-Level 1] [JavaScript] 숫자 문자열과 영단어 - 객체 사용 (0) | 2022.12.05 |
[프로그래머스-Level 1] [JavaScript] 행렬의 덧셈 - 배열 (0) | 2022.12.02 |
[프로그래머스-Level 1] [JavaScript] 완주하지 못한 선수 - Hash 사용 (0) | 2022.12.01 |
[프로그래머스-Level 1] [JavaScript] 명예의 전당(1) - 배열, 정렬, splice 활용 (0) | 2022.11.30 |