알고리즘/구현
프로그래머스[자바] - 신고결과받기
제이G
2022. 6. 21. 21:29
핵심정리
1. hashMap<String, hashset<String>> 자료구조 사용 (목표를 구하는데 용이하기 때문)
그 것을 map이라고 하자.
2. map을 "reporter(신고자)" , "reported(피신고자)" 순서가 아닌, "reported(피신고자)" , "reporter(신고자)" 순서로 정의
처음과 같은 형태로 정의하면 각 reported가 k번이상 신고받았는지 테이블을 순회하며 확인해야함. 두번째순서로 정의하면 단순히, reporter의 숫자만 count하면 된다.
3. hashMap<String, Integer> 자료구조 사용
각 ID별 idx를 지정해줘야 함
예를들어 k=2일때, reported A에 대한 reporter [B, C]를 조사중이라고 해보자. reporter의 수가 2이상이기 때문에 각 B, C의 신고처리 받는메일 횟수를 1씩 증가시켜줘야 한다. 하지만, B, C는 String이기 때문에 어느 인덱스를 증가시켜줘야하는지 알 수 없다.
코드
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
HashMap<String, HashSet<String>> map = new HashMap<>();
HashMap<String, Integer> idIdx = new HashMap<>();
int[] answer = new int[id_list.length];
for (int i=0; i<id_list.length; i++) {
map.put(id_list[i], new HashSet<>());
idIdx.put(id_list[i], i);
}
for (int i=0; i<report.length; i++) {
String[] tmp = report[i].split(" ");
String reporter = tmp[0];
String reported = tmp[1];
map.get(reported).add(reporter);
}
for (int i=0; i<map.size(); i++) {
HashSet<String> reporters = map.get(id_list[i]);
if (reporters.size() >= k) {
for (String reporter: reporters) {
answer[idIdx.get(reporter)]++;
}
}
}
return answer;
}
}