핵심정리
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;
}
}
'알고리즘 > 구현' 카테고리의 다른 글
[백준 19583] 싸이버 개강 총회 -구현, 문자열, HashSet (0) | 2023.02.07 |
---|---|
[백준 10972, 10973] 다음순열, 이전순열 (Java) (0) | 2022.07.17 |
프로그래머스 - 문자열 압축 (0) | 2022.06.30 |
프로그래머스 - 키패드 누르기 [자바] (0) | 2022.06.24 |
프로그래머스[자바] - 두 개 뽑아서 더하기 (0) | 2022.06.21 |