코딩테스트

[코딩테스트(Java)] 프로그래머스 92334 신고 결과 받기

inhooo00 2025. 3. 11. 01:03

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

public int[] solution(String[] id_list, String[] report, int k) {
    int[] count = new int[id_list.length];
    int[] answer = new int[id_list.length];
    HashMap<String, Integer> hashMap = new HashMap<>();

    for (int i = 0; i < id_list.length; i++) {
        hashMap.put(id_list[i], i);
    }

    Set<String> set = new HashSet<>(Arrays.asList(report)); // 중복 제거해서 구성
    List<String> list = new ArrayList<>(set);

    String[] re = set.toArray(new String[0]);
    for (int i = 0; i < set.size(); i++) {
        String[] arr = re[i].split(" ");
        count[hashMap.get(arr[1])]++;
    }

    for (int i = 0; i < list.size(); i++) { // 일정치 넘으면 신고한 사람들에게 보내기
        String[] arr = list.get(i).split(" ");
        if (count[hashMap.get(arr[1])] >= k) {
            answer[hashMap.get(arr[0])]++;
        }
    }
    return answer;
}

 

 

📍포인트

1. 중복 신고는 의미없으니 report는 중복을 없애고
3. 신고한 report가 k개보다 많은 경우
2. 그 신고를 한 유저들에게 메일을 보낸다.

 

 

📍삽질

1. 배열의 인덱스와 값의 매칭을 엄청 고민한 결과 Map이 정답이였다. 괜히 안 쓰다가 머리만 아팠다.
2. Set은 조회가 불가능하기 때문에 List로 변경 후 조회했다. 
3. 맨 처음 2중 for문으로 구현했지만, 시간초과후 다시 삽질..
4. 그냥 내가 멍청한 것 같다....✌️