ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022 KAKAO BLIND RECRUITMENT] 신고 결과 받기
    코딩 테스트/Level 1 2022. 1. 17. 01:08
    반응형

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

     

    코딩테스트 연습 - 신고 결과 받기

    문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

    programmers.co.kr

     

    파이썬

    최신 파이썬에선 dict의 순서가 유지됩니다.

    def solution(id_list, report, k):
        report_dict = {id_: set() for id_ in id_list}
        for each in report:
            user_id, report_id = each.split(' ')
            report_dict[report_id].add(user_id)
        answer = {id_: 0 for id_ in id_list}
        for key, values in report_dict.items():
            if len(values) >= k:
                for value in values:
                    answer[value] += 1
        return list(answer.values())

     

    의미는 없지만
    제너레이터를 이용해서
    리포트 내에 들어 있는 문자열을 split 하면
    한 줄을 더 줄일 수 있습니다. 
    (each.split(' ') for each in report)

    def solution(id_list, report, k):
        report_dict = {id_: set() for id_ in id_list}
        for user_id, report_id in (each.split(' ') for each in report):
            report_dict[report_id].add(user_id)
        answer = {id_: 0 for id_ in id_list}
        for key, values in report_dict.items():
            if len(values) >= k:
                for value in values:
                    answer[value] += 1
        return list(answer.values())

     

    Java

    파이썬과 같은 로직인데 ㅠ,.ㅠ 
    너무 장황합니다. 

    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.HashSet;
    
    class Solution {
        public int[] solution(String[] id_list, String[] report, int k) {
            HashMap<String, HashSet<String>> reportMap = new HashMap<>(id_list.length);
            for (String each : report) {
                String[] temp = each.split(" ");
                reportMap.putIfAbsent(temp[1], new HashSet<>());
                reportMap.get(temp[1]).add(temp[0]);
            }
            int[] answer = new int[id_list.length];
            for (String key : reportMap.keySet()) {
                if (reportMap.get(key).size() >= k) {
                    for (String temp : reportMap.get(key)) {
                        answer[Arrays.asList(id_list).indexOf(temp)]++;
                    }
                }
            }
            return answer;
        }
    }

    var를 쓰면 좀 덜 장황해 보일까요?

    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.HashSet;
    
    class Solution {
        public int[] solution(String[] id_list, String[] report, int k) {
            var reportMap = new HashMap<String, HashSet<String>>(id_list.length);
            for (var each : report) {
                var temp = each.split(" ");
                reportMap.putIfAbsent(temp[1], new HashSet<>());
                reportMap.get(temp[1]).add(temp[0]);
            }
            var answer = new int[id_list.length];
            for (var key : reportMap.keySet()) {
                if (reportMap.get(key).size() >= k) {
                    for (var temp : reportMap.get(key)) {
                        answer[Arrays.asList(id_list).indexOf(temp)]++;
                    }
                }
            }
            return answer;
        }
    }

    var를 사랑합시다. 

    반응형
Designed by Tistory.