[プログラマー(Programmers)]レポート結果の取得(java)/202 KAKAO BLIND RECRUIMENT
13392 ワード
こんにちは!今日はプログラマーから通報を受けた結果について質問します.この問題は2022年にKAKAO BLIND RECRUITMENTによって提起された.
1)問題リンク
https://programmers.co.kr/learn/courses/30/lessons/92334
2)問題を解く
✔キー:レポートIDを生成し、value:レポートIDマッピング
報告されたIDがkeyであり、報告されたIDがvalueであるHashMapが生成される.この場合、1つのIDで通報した人が何人かいるかもしれませんが、1人で何度も同じIDを通報しても、1回しか通報しません.したがって、HashMapのキーはStringであり、valueはString Setとして宣言され、重複アラームを防止する.
✔停止したユーザリストの作成(finalStopped)
k回以上の通報を受けた人は停止されます.上に作成したhashMap(ReportedMap)では、valueに格納されているsetのサイズがkより大きいことがわかります.setsizeがkより大きい場合は、リストで停止するユーザの名前を保存します.
✔受信者リストの生成
停止した人はメールを受け取った人とは違います.メールを受け取った相手は「他の通報が止まった人」.したがって、finalStopped Listに格納されている停止済みユーザをキー値として、reportedMapのvalueをインポートし、mailList hashMapに格納できます.
3)完全コード
リストとHashMapの資料構造が乱発しているような気がします.特に、最後にmailList hashMapを宣言する必要はありません.後で時間がある時Code Refactoringをします
1)問題リンク
https://programmers.co.kr/learn/courses/30/lessons/92334
2)問題を解く
✔キー:レポートIDを生成し、value:レポートIDマッピング
報告されたIDがkeyであり、報告されたIDがvalueであるHashMapが生成される.この場合、1つのIDで通報した人が何人かいるかもしれませんが、1人で何度も同じIDを通報しても、1回しか通報しません.したがって、HashMapのキーはStringであり、valueはString Setとして宣言され、重複アラームを防止する.
✔停止したユーザリストの作成(finalStopped)
k回以上の通報を受けた人は停止されます.上に作成したhashMap(ReportedMap)では、valueに格納されているsetのサイズがkより大きいことがわかります.setsizeがkより大きい場合は、リストで停止するユーザの名前を保存します.
✔受信者リストの生成
停止した人はメールを受け取った人とは違います.メールを受け取った相手は「他の通報が止まった人」.したがって、finalStopped Listに格納されている停止済みユーザをキー値として、reportedMapのvalueをインポートし、mailList hashMapに格納できます.
3)完全コード
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, Set<String>> reportedMap = new HashMap<>(); //"muzi frodo" -> frodo가 key, muzi가 value
for (String str : report) {
String[] reportSplit = str.split(" "); //muzi frodo -> reportSplit[0] = muzi, reportSplit[1] = frodo
String reported = reportSplit[1]; //신고 당한 사람
String reporter = reportSplit[0]; //신고한 사람
Set<String> set;
if(reportedMap.containsKey(reported)) {
set = reportedMap.get(reported);
} else {
set = new HashSet<>();
}
set.add(reporter);
reportedMap.put(reported, set);
}
List<String> keySet = new ArrayList<>(reportedMap.keySet());
List<String> finalStopped = new ArrayList<>();
for (String key : keySet) {
int reportedSize = reportedMap.get(key).size();
if (reportedSize >= k) {
finalStopped.add(key);
}
}
Map<String, Integer> mailList = new HashMap<>();
for (String stopped : finalStopped) {
List<String> list = new ArrayList<>(reportedMap.get(stopped));
for (String str : list) {
mailList.put(str, mailList.getOrDefault(str, 0) + 1);
}
}
for (int i = 0; i < id_list.length; i++) {
answer[i] = mailList.getOrDefault(id_list[i], 0);
}
return answer;
}
}
4)感じリストとHashMapの資料構造が乱発しているような気がします.特に、最後にmailList hashMapを宣言する必要はありません.後で時間がある時Code Refactoringをします
Reference
この問題について([プログラマー(Programmers)]レポート結果の取得(java)/202 KAKAO BLIND RECRUIMENT), 我々は、より多くの情報をここで見つけました https://velog.io/@fantastik/50テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol