반응형
https://school.programmers.co.kr/learn/courses/30/lessons/92334
풀이
해당 문제는 왜 Level 1로 되어있는지 잘 모르겠다...
문제에 중복을 제거해야하는 특징이 있기 때문에 HashMap과 HashSet을 사용하면 좋을 것 같다고 생각했다. 이후에 신고자와 대상자를 나눠서 HashSet을 대상자 기준으로 배열을 만들어 해결했다.
HashSet[대상자] 배열에 신고자를 입력해주면 자동으로 중복이 제거 되므로 중복 문제를 쉽게 해결할 수 있다.
for (String name : report) {
String[] tmp = name.split(" ");
int tmp_0 = hm.get(tmp[0]);
int tmp_1 = hm.get(tmp[1]);
hs[tmp_1].add(tmp_0);
}
HashSet에 신고 내역을 다 입력해줬으면 k보다 더 많은 신고를 받은 대상자만 뽑아서 answer 배열의 해당 인덱스에 뿌려주면 된다.
<최종코드>
import java.util.HashMap;
import java.util.HashSet;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
HashMap<String, Integer> hm = new HashMap<>(); // [아이디, 해당 아이디 번호]
HashSet<Integer>[] hs = new HashSet[id_list.length]; // 중복 제거
// 아이디 수만큼 HashSet 생성
for (int i=0; i<id_list.length; i++) {
hm.put(id_list[i], i);
hs[i] = new HashSet<>();
}
// 신고자와 대상자 나눠서 HashSet에 넣음 (중복 제거)
for (String name : report) {
String[] tmp = name.split(" ");
int tmp_0 = hm.get(tmp[0]);
int tmp_1 = hm.get(tmp[1]);
hs[tmp_1].add(tmp_0);
}
// 신고 당한 횟수가 K를 넘겼을 경우 answer배열에 추가
for (int i=0; i<id_list.length; i++) {
if (hs[i].size() >= k) {
for (int idx : hs[i]) {
answer[idx]++;
}
}
}
return answer;
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]JAVA - Level1. 폰켓몬 (0) | 2022.09.06 |
---|---|
[프로그래머스]JAVA - Level1. 소수 만들기 (0) | 2022.09.05 |
[프로그래머스]JAVA - Level1. 최소직사각형 (0) | 2022.09.03 |
[프로그래머스]JAVA - Level1. 같은 숫자는 싫어 (0) | 2022.09.01 |
[프로그래머스]JAVA - Level2. 가장 큰 수 (0) | 2022.09.01 |