문제
문제 설명
게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 한다고 합니다. 개발하려는 시스템은 다음과 같습니다.
- 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
- 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
- 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저를 계속해서 신고할 수 있습니다.
- K번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
- 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.
이용자의 ID가 담긴 문자열 배열 id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k가 매게변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 반환하면 되는 문제입니다.
더보기
※제한 사항
- 2 <= id_list의 길이 <= 1,000
- 1 <= id_list의 원소 길이 <= 10
- id_list는 알파벳 소문자로만 이루어져 있습니다.
- 1 <= report의 길이 <= 200,000
- 3 <= report의 원소 길이 <= 21
- report의 원소는 "이용자id 신고한id" 형태의 문자열입니다.
- id는 알파벳 소문자로만 이루어져 있습니다.
- 이용자id와 신고한id는 공백(스페이스)하나로 구분되어 있습니다.
- 자기 자신을 신고하는 경우는 없습니다.
- 1 <= k <= 200, k는 자연수입니다.
- return하는 배열은 id_list의 담긴 id 순서대로 각 유저가 받은 결과 메일 수를 담으면 됩니다.
풀이
단순 반복으로 간단하게 풀 수 있는 문제입니다.
먼저 아래 사진과 같이 "신고자id 신고된id"형태로 되어 있는 값을 "신고된id 신고자id" 형태로 바꾼 다음 report_name에 저장해주는 작업을 해주었습니다.
그 다음으로 report_name의 각 요소를 순회하면서 report_name[key]의 길이가 k보다 크거나 같으면 그 id는 정지당하는 id가 되기 때문에 id를 신고한 유저들인 report_name[key]에 해당하는 이름들에 대한 항목인 answer[id_list.indexOf(name)을 증가해주었습니다.
아래는 풀이에 사용한 코드입니다.
function solution(id_list, report, k) {
// answer의 기본 형태가 [0,0]과 같은 형태이므로 0으로 초기화
var answer = new Array(id_list.length).fill(0)
// 신고 당한 id를 저장하기 위한 객체
const report_name = {}
// report_name 빈 배열로 초기화
id_list.map((id) => {
if(report_name[id] === undefined){
report_name[id] = [];
}
})
// "신고자id 신고된id" => "신고된id 신고자id" 형태로 바꿔주는 작업
report.map((data) => {
const report_data = data.split(" ")
// 중복 신고는 포함하지 않습니다.
if(!report_name[report_data[1]].includes(report_data[0])){
report_name[report_data[1]].push(report_data[0])
}
})
// k번 이상 신고된id의 신고자id를 찾은 다음 해당 되는 answer[idx]값을 증가해줍니다.
for (let key in report_name){
if(report_name[key].length >= k){
report_name[key].map((name) => {
answer[id_list.indexOf(name)] += 1
})
}
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.03 네트워크 (JavaScript) (0) | 2024.10.27 |
---|---|
[프로그래머스] Lv.02 카펫 (JavaScript) (1) | 2024.06.09 |
[프로그래머스] Lv.01 외톨이 알파벳 (JavaScript) (0) | 2024.06.07 |
[프로그래머스] Lv.02 큰 수 만들기 (JavaScript) (1) | 2024.06.06 |
[프로그래머스] Lv.02 스킬트리 (JavaScript) (1) | 2024.06.05 |