반응형
📖 문제
https://school.programmers.co.kr/learn/courses/30/lessons/92334
💡 풀이 방식
• Map
필요 자료구조
- 유저 ID와 그에 대한 임의의 인덱스 저장하는 Map
- 유저 ID와 그 ID를 신고한 사람의 ID 집합을 가진 Map
1.id_list를 돌며 각 ID와 임의의 인덱스를 저장하고, 각 ID를 신고한 ID 목록을 중복 없이 저장하기 위해 Set을 초기화한다.
for(int i = 0 ; i < id_list.length ; i++) {
String name = id_list[i];
map.put(name, new HashSet<>());
idxMap.put(name, i);
}
2. report 배열을 돌며 누가 누구를 신고했는지 저장한다.
for(String r : report) {
String[] s = r.split(" ");
map.get(s[1]).add(s[0]); // s[0]이 s[1]을 신고함
}
3. id_list를 돌며 해당 id가 신고당한 횟수가 k번 이상인 경우, 이용 정지 메일을 발송한다.
for(int i = 0 ; i < id_list.length ; i++) {
HashSet<String> send = map.get(id_list[i]); // id_list[i]를 신고한 사람들 목록 (중복 X)
if(send.size() >= k) { // k번 이상 신고당한 경우
for(String x : send) { // 이 사람을 신고한 사람들에게 경고 메일 발송
answer[idxMap.get(x)]++;
}
}
}
💥 유의사항
해당 ID를 신고한 사람의 ID를 저장할 때 중복이 없어야 하므로 Set을 이용한다.
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, Integer> idxMap = new HashMap<>(); // 유저 ID와 임의의 인덱스 저장용 Map
Map<String, HashSet<String>> map = new HashMap<>(); // 신고자 id룰 신고한 id 목록 저장 (중복 없이)
// map의 HashSet 초기화 & ID 별 인덱스 저장
for(int i = 0 ; i < id_list.length ; i++) {
String name = id_list[i];
map.put(name, new HashSet<>());
idxMap.put(name, i);
}
// 누가 누구를 신고했는지 저장
for(String r : report) {
String[] s = r.split(" ");
map.get(s[1]).add(s[0]); // s[0]이 s[1]을 신고함
}
// 이용 정지 메일 발송
for(int i = 0 ; i < id_list.length ; i++) {
HashSet<String> send = map.get(id_list[i]);
if(send.size() >= k) {
for(String x : send) {
answer[idxMap.get(x)]++;
}
}
}
return answer;
}
}
|
cs |
➕ 다른 풀이 방식
- 이 코드도 짧은 편이라 좋다
- 2번째 풀이가 객체 지향적이다. (참고용)
💦 어려웠던 점
- 각 유저별 고유 인덱스를 부여할 생각을 하지 못 했다...
🧐 새로 알게 된 내용
- Map<String, HashSet<String>> map = new HashMap<>();
여기서 HashSet으로 정의하지 않으면 에러가 난다.
- Map의 value로 저장된 Set에 값 추가하는 방법 → map.get(s[1]).add(s[0]);
- 각 유저별 고유의 인덱스를 부여하는 풀이를 기억하자!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level3] [1차] 셔틀버스 (JAVA) (0) | 2024.07.27 |
---|---|
[프로그래머스/Level3] 표 편집 (JAVA) (2) | 2024.07.24 |
[프로그래머스/Level2] 우박수열 정적분 (JAVA) (0) | 2024.07.08 |
[프로그래머스/Level2] 교점에 별 만들기 (JAVA) (0) | 2024.06.11 |
[프로그래머스/Level3] 부대 복귀 (JAVA) (2) | 2024.06.08 |