[プログラマー]通報結果を得る


[1]問題の説明


質問内容は以下の通りです.


Reportシナリオは、各シナリオの内容が空白であることに基づいて、初期値をユーザのID、
その後は価格が申告されたユーザーのIDです

[2]解答


1.重複除外


プレイヤーごとに何度も同じプレイヤーに通報することはできないので、レポート列内に
重複配列の値は入れません.重複を排除する新しい配列を発表した.
setオブジェクトを使用して重複する配列を再配置します.
var array = [...new Set(report)]

set 적용 전 배열 값  : ["ryan con", "ryan con", "ryan con", "ryan con"]
set 적용 후 배열 값 :  ["ryan con"]

2.申告IDインデックス番号を持つ配列を生成する


各プレイヤーに、彼らを告発したプレイヤーのidリストインデックス番号を追加します.
「muzi」の場合、idリストのインデックス値が2の「apeach」レポート.
[[2], ...] このように並べるためには、コードを書く必要があります.
次の配列は、レポート配列から重複を除去する新しい配列です.
split関数を用いて,空白を基準に価格を適切に区分した.
(空白条件は
array.map((el,idx)=>{
    var a = array[idx].split(' ');
    var b = id_list.indexOf(a[0])
    new_idlist[id_list.indexOf(a[1])].push(b)
})

new_idlist 배열의 출력값 예 :  [ [ 2 ], [ 0, 2 ], [], [ 1, 0 ] ]
각각의 인덱스마다 신고받은 인덱스번호를 가지고있다.

3.受信処理結果メールのユーザ数を統計する


新しく作成された配列new idlistで、ユーザー一人一人が通報されました
何度通報されたか判別できます.
通報されたプレイヤーが停止した後に彼に対する処理メールを送信したのはk回以上の場合である.
map関数によって重複文がnew idlistの配列値に返され、各要素の長さがk値より大きい場合にのみ.
array配列では、for文でユーザに送信する処理結果メールのカウント値を繰り返し入力します.
new_idlist.map((el)=>{  
        if(el.length >= k){
            for(var i=0;i<el.length;i++){
                answer[el[i]]++
            }   
        }
})
    

[3]完全なコードと実行結果

function solution(id_list, report, k) {
    
    
    //각각의 배열 선언
    var newarr = [];  
    var answer = Array.from({length: id_list.length}, () => 0);
    var new_idlist = Array.from({length: id_list.length}, () => []);
    var array = [...new Set(report)]
    
    //신고받은 ID의 인덱스번호를 가진 배열 생성
    array.map((el,idx)=>{
        var a = array[idx].split(' ');
        var b = id_list.indexOf(a[0])
        new_idlist[id_list.indexOf(a[1])].push(b)
    })
       
    //처리결과메일을 받을 유저 카운트하기
    new_idlist.map((el)=>{  
        if(el.length >= k){
            for(var i=0;i<el.length;i++){
                answer[el[i]]++
            }   
        }
    })
     
    return answer
}