728x90
https://school.programmers.co.kr/learn/courses/30/lessons/92334
중복 신고를 제거하기 위해서 HashMap과 HashSet을 이용했다
- Set : 데이터 중복 저장이 불가능하고, 입력 순서대로의 저장 순서를 보장할 수 없는 자료구조
- HashSet : Set 인터페이스를 구현한 자료구조로, 순서가 필요없는 데이터를 hash table에 저장한다. Set 중에서 가장 성능이 좋고 put() 메소드를 사용해 데이터를 넣는다
- HashMap : Map 인터페이스를 구현한 자료구조로, key-value 형식의 데이터를 저장한다. 중복된 key 값을 허용하지 않는다
Map<String, HashSet<String>> reportMap = new HashMap<>();
- [신고된 ID, [신고한 ID 들]] 로 구성된 HashMap
- key는 신고된 ID, value는 중복 허용을 하지 않는 HashSet 사용 (한 사람이 같은 사람을 여러 번 신고하는 경우를 제외하기 위함)
Map<String, Integer> answerMap = new HashMap<>();
- [신고된 ID, 메일 수] 로 구성된 HashMap
- 이를 int[] 로 변환하여 answer에 저장한다
자바 코드)
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, HashSet<String>> reportMap = new HashMap<>();
Map<String, Integer> answerMap = new HashMap<>();
for (int i = 0; i < id_list.length; i++) { // 초기화
HashSet<String> reportingId = new HashSet<>();
reportMap.put(id_list[i], reportingId);
answerMap.put(id_list[i], 0);
}
// 신고 기록 세팅
for (String r : report) {
String[] reportStr = r.split(" ");
reportMap.get(reportStr[1]).add(reportStr[0]);
}
// 유저 별 신고 결과 메일 세팅
for (String reportUser : reportMap.keySet()) {
HashSet<String> user = reportMap.get(reportUser);
if (user.size() >= k) {
for (String userId : user) {
answerMap.put(userId, answerMap.get(userId) + 1);
}
}
}
for(int i=0;i< id_list.length;i++) {
answer[i] = answerMap.get(id_list[i]);
}
return answer;
}
}
참고)
https://eunoia3jy.tistory.com/166
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[해시] 폰켓몬 - JAVA (0) | 2022.09.11 |
---|---|
[2021 KAKAO BLIND RECRUITMENT] 신규 아이디 추천 - JAVA (0) | 2022.09.10 |
[Level 2] 빛의 경로 사이클 - JAVA (0) | 2022.09.05 |
[2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 (0) | 2022.09.03 |
[2021 카카오 채용연계형 인턴십] 거리두기 확인하기 - JAVA (0) | 2022.09.02 |
댓글