문제
프로그래머스 > 코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기
언어
JAVA
난이도
Lv.1
풀이시간
3시간
문제 풀이
1. 신고자 신고당한사람 Set에 대한 리스트 중복 제거
=> HashSet 사용
2. 신고 당한 사람에 대한 신고 횟수 구하기
3. 신고 횟수로 정지당할 사람 리스트 구하기
3. 정지 당한 사람을 신고한 신고자에 대한 메일 발송 횟수 구하기
소스코드
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
import java.util.Set;
import java.util.HashSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Collections;
import java.util.ArrayList;
/**
* 프로그래머스 > 코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기
*
* @author
* @since 2022.02.09 Wed 16:38:50
*/
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = {};
answer = new int[id_list.length];
HashSet<String> reportSet = new HashSet<String>();
//Hash로 중복 제거 (같은 사람이 같은 신고자에게 중복 신고한 경우)
for (int i = 0; i < report.length; i++) {
reportSet.add(report[i]);
}
//key:신고 당한 사람, value: 신고자 리스트
HashMap<String, ArrayList<String>> reportList = new HashMap<String, ArrayList<String>>();
for(Iterator j = reportSet.iterator(); j.hasNext();){
ArrayList reporterList = new ArrayList<String>();
//띄어쓰기 공백 파싱
String tmp = (String) j.next();
String[] tmp_list = tmp.split(" ");
String reporterName = tmp_list[0];
String reportedName = tmp_list[1];
/*
* 신고당한사람에 대한 신고자 리스트 만들기
* ex)
* 신고자: muzi,apeach 신고당한사람:frodo
* key : frodo,
* value : ArrayList (muzi, apeach)
*/
//두번째 신고자부터는 존재하는 key 를 불러와 add 해준다.
if(reportList.get(reportedName) != null) {
reportList.get(reportedName).add(reporterName);
} else {
//첫번째 신고자는 list를 첫 생성하여 add한 후 key, value값을 put한다.
reporterList.add(reporterName);
reportList.put(reportedName, reporterList);
}
}
ArrayList<String> id_cnt_list = new ArrayList<String>();
// 신고횟수 k 이상 정지 대상 체크
for (int i = 0; i < id_list.length; i++) {
String userId = id_list[i];
// null check
if(reportList.get(userId) == null) {
//null인 경우 신고자 0명
} else {
int reportCnt = reportList.get(userId).size();
//임의로 주어진 신고 횟수 k 값 이상인 경우 정지
if (k <= reportCnt) {
id_cnt_list.addAll(reportList.get(userId));
}
}
}
// 사용자 순서대로 메일 발송 횟수 체크
for (int i = 0; i < id_list.length; i++) {
String userId = id_list[i];
int aFrequency = Collections.frequency(id_cnt_list, userId);
answer[i] = aFrequency;
// System.out.println(""+userId+":"+aFrequency);
}
return answer;
}
}
|
cs |
후기
다른 사람 풀이 보니 내 코드는 길고 복잡하다.
또한 Lv.1 수준에 3시간이 걸렸단 사실이 절망이었다.
내 소스를 올리는 것이 창피하기도 하지만 훗날 성장도를 가늠하기 위해 올린다.
출처
프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'코딩 테스트' 카테고리의 다른 글
[프로그래머스] 기능 개발 (0) | 2022.03.17 |
---|---|
[프로그래머스] 2022 SK ICT Family 신입 개발자 채용 챌린지(BE직무) - 세번째 문제 (1) | 2022.03.14 |
[프로그래머스] 2022 SK ICT Family 신입 개발자 채용 챌린지(BE직무) - 첫번째 문제 (0) | 2022.03.14 |
[프로그래머스] 2022 Dev-Matching: 게임 프로그래머 테스트 (0) | 2022.03.08 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.03.01 |