🔗 문제 링크
📖 풀이 과정
- 배열, 자료구조를 활용한 구현 유형의 문제입니다.
- A 사람이 B 사람에 대해 여러번 신고를 하더라도 한 번만 기록됩니다.
- 따라서, 저는 매개변수로 받는 report 배열을 set 자료구조를 이용하여 중복을 제거하고 시작했습니다.
- 중복이 제거된 report 배열을 순회하며 신고를 당한 사람을 map 자료구조에 넣고 빈도수를 저장합니다.
- 여기서는 map.getOrDefault() 메소드를 활용했습니다.
- 다음 단계는 k 변수와 빈도의 비교입니다.
- k 변수 이하이면 정지당하는 사람을 stop 리스트에 추가합니다.
- report 리스트를 순회하며 신고당한 사람이 stop 리스트에 있으면 fromMap(신고한 사람)에 수를 추가합니다.
- 마지막으로 반환할 배열에 fromMap 변수의 값을 하나씩 넣어줍니다.
- 여기서 만약 값이 없다면 0을 기본값으로 하여 반환합니다.
💻 코드
public static int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String,Integer> map = new HashMap<>();
Set<String> set = new HashSet<>(Arrays.asList(report));
report = set.toArray(new String[set.size()]);
for(int i = 0; i< report.length; i++){
String[] s = report[i].split(" ");
map.put(s[1],map.getOrDefault(s[1],0) + 1);
}
List<String> stop = new ArrayList<>();
for(String str : map.keySet()){
if(map.get(str) >= k){
stop.add(str);
}
}
Map<String,Integer> fromMap = new HashMap<>();
for(int i = 0; i< report.length; i++){
String[] s = report[i].split(" ");
if(stop.contains(s[1])){
fromMap.put(s[0],fromMap.getOrDefault(s[0],0) + 1);
}
}
for(int i = 0; i< id_list.length; i++){
answer[i] = fromMap.getOrDefault(id_list[i],0);
}
return answer;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 단체사진 찍기 (Java) (0) | 2022.02.17 |
---|---|
프로그래머스 : 숫자 문자열과 영단어 (Java) (0) | 2022.02.15 |
프로그래머스 : 신규 아이디 추천 (Java) (0) | 2022.02.13 |
프로그래머스 : 로또의 최고 순위와 최저 순위 (Java) (0) | 2022.02.12 |
프로그래머스 : 소수 찾기 (Java) (0) | 2022.02.12 |