신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
문제 예시는 신고 결과 받기 를 참고하기
Python
에서는 딕셔너리를 사용하면 된다.
그렇다면 Java
에서는? Map
을 사용하면 된다.
dic_list = {id : [] for id in id_list}
와 같은 형식을 사용하여, id
(key 인덱스)에 해당하는 [] list
에 user가 신고한 ID를 넣는다.
이를 사용할 시 쉽게 구현할 수 있다.
✔ 그러면 Java 에서는?
{"abs":212, "cde":3213, "res":4141}; 일 때
찾는 문자열 {"abs", "res"}
"cde"의 인덱스를 알고 싶을 때
HashMap<String, Integer> indexHashMap = new HashMap<>();
HashMap<String, HashSet<String>> map = new HashMap<>();
반복문을 돌리면서 index를 저장한다.
for(index 찾는 문자열1까지)
- indexHashMap.put(찾는문자열1[index], index);
- map.put(찾는문자열[index], new HashSet<>());
HashMap
에 저장한다.HashMap
에서는 찾는 HashSet
을 value
에 넣어준다.
- cde
map.get(찾는 문자열2).add(찾는 문자열1);
for(index 찾는 문자열1 까지)
- HashSet<String> = map.get(index(i));
- 만약 key크기 보다 크다면
- 반복문을 돌려서 횟수를 증가시킨다.
import java.util.*;
public class pg92334 {
// 인덱스 저장 HashMap static HashMap<String, Integer> idxMap;
// value에 중복 제거하는 HashMap static HashMap<String, HashSet<String>> map;
static int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
map = new HashMap<>();
idxMap = new HashMap<>();
// map에 삽입한다.
for(int i =0 ; i< id_list.length; i++){
idxMap.put(id_list[i], i);
map.put(id_list[i], new HashSet<>());
}
for (String s : report) {
String[] rs = s.split(" ");
map.get(rs[1]).add(rs[0]);
}
for(int i= 0; i< id_list.length;i++){
HashSet<String> s = map.get(id_list[i]);
if(s.size() >= k){
for (String s1 : s) {
answer[idxMap.get(s1)] +=1;
}
}
}
return answer;
}
public static void main(String[] args) {
String[] id_list = {"muzi", "frodo", "apeach", "neo"};
String[] report = {"muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"};
int k = 2;
solution(id_list, report, k);
}
}