[PRODGRAMMERS]レポート結果の取得


🙆‍♀️ 質問の表示
💡 私の答え
public int[] solution(String[] id_list, String[] report, int k) {
    int[] answer = new int[id_list.length];
    // 신고한 유저와 신고당한 유저 배열(report)에서 중복 제거
    Set<String> set = new HashSet<>();
    // 신고받은 유저의 이름과 신고 횟수를 저장
    Map<String, Integer> map = new HashMap<>();
    // 정지된 유저 저장
    List<String> list = new ArrayList<>();

    for(String i : report) set.add(i);
    Iterator<String> itor = set.iterator();

    while(itor.hasNext()){
        String name = itor.next().split(" ")[1];

        if(map.containsKey(name)){
            int count = map.get(name);
	    map.put(name, ++count);
        }else{
            map.put(name, 1);
        }
    }

    for(Map.Entry<String, Integer> entry : map.entrySet()){
    	if(entry.getValue() >= k){
    	    list.add(entry.getKey());
    	}
    }

    // 각 유저가 메일을 받은 횟수 
    Map<String, Integer> result = new LinkedHashMap<>();
    for(String id : id_list) result.put(id, 0);

    Iterator<String> reportUser = set.iterator();

    while(reportUser.hasNext()){
    	String[] arr = reportUser.next().split(" ")    
    	
        if(list.contains(arr[1])){
    	    int count = result.get(arr[0]);
    	    result.put(arr[0], ++count);
    	}
    }

    int count = 0;

    for(Map.Entry<String, Integer> entry : result.entrySet()){
        answer[count] = entry.getValue();
        count++;
    }

    return answer;
}
  • と同じプレイヤーへの通報は1回処理され,集合にレポート配列が加わり,重複を解消する.
  • の繰り返し文字でset要素を取り出します.各要素の形態は「申告したプレイヤーが空白申告したプレイヤー」であるため,split()法を用いて空白を基準にカットする.
  • 空白の標準の後ろの文字は通報されたプレイヤーなので、地図に名前を書きます.地図に名前がついている場合は、1を追加します.
  • map.EntrySet()を使用して鍵と値を取得し、k回以上のアラームが受信されたかどうかを確認します.k回以上であればリストに追加します.
  • の格納順序を変更しないようにLinkedHashMapを宣言し、すべてのユーザのIDを追加する.
  • 現在停止しているユーザ(list)を
  • reportUserの各要素に申告した人がいる場合は、値(メール受信回数)に1を加算します.
  • entrySet()を使用して値を取得し、質問欄に順番に入れます.