프로그래머스 - 신고 결과 받기

최지홍·2022년 5월 24일
0

프로그래머스

목록 보기
15/15

문제 출처: https://programmers.co.kr/learn/courses/30/lessons/92334


import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] res = new int[id_list.length];

        Map<String, Set<String>> map = new HashMap<>();
        Map<String, Integer> cnt = new LinkedHashMap<>();

        // id_list의 순서대로 값을 출력해야 한다.
        // report는 띄어쓰기로 구분되어 신고자, 피신고자로 들어온다. 피신고자가 key, 신고자가 value다.

        for (int i = 0; i < id_list.length; i++) {
            map.put(id_list[i], new HashSet<>());
            cnt.put(id_list[i], 0);
        }

        StringTokenizer tokenizer = null;

        for (int i = 0; i < report.length; i++) {
            tokenizer = new StringTokenizer(report[i]);
            String from = tokenizer.nextToken();    // 신고자
            String to = tokenizer.nextToken();      // 피신고자
            map.get(to).add(from);
        }

        for (int i = 0; i < id_list.length; i++) {
            if (map.get(id_list[i]).size() >= k) {
                // k번 이상 신고 당한 경우 메일 전송
                for (String name : map.get(id_list[i])) {
                    cnt.put(name, cnt.get(name) + 1);
                }
            }
        }

        int index = 0;

        for (Map.Entry<String, Integer> entry : cnt.entrySet()) {
            res[index++] = entry.getValue();
        }

        return res;
    }
}

  • 간단한 구현 문제였는데, 왜일까 시간이 오래 걸렸다.
  • 레벨 1짜리 문제인데 이렇게 시간을 많이 쓰다니 뭔가 자괴감이 든다.
  • 초반에 로직을 정리하는 연습을 많이 해야할 것 같다. 그에 따른 자료구조를 생각하는 것도 필수고...
profile
백엔드 개발자가 되자!

0개의 댓글

관련 채용 정보