관리 메뉴

너와 나의 스토리

[Java] 2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기: 풀이 & 코드 본문

Algorithm/Programmers

[Java] 2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기: 풀이 & 코드

노는게제일좋아! 2022. 6. 1. 01:40
반응형

문제: https://programmers.co.kr/learn/courses/30/lessons/92334?language=java 

 

 

문제 풀이:

  • report는 <신고자, 피신고자> 쌍이 리스트로 존재하는 형태이다
  • 이를 for 문으로 돌면서 각각 reporter와, respondent로 파싱하고
    • 신고자가 전에 이 피신고자를 신고한 적 있는지 확인하고, 아직 신고한 적 없으면 다음 과정을 수행한다.
    • reports(<신고자, 피신고자 리스트>)에 피신고자를 삽입한다.
      • reports[신고자].put(피신고자)
    • 피신고자가 현재 몇 번 신고 당했는지 count한다.
      • count[피신고자]++
  • 사용자를 for 문으로 돌면서 사용자가 신고한 사람 리스트를 본다.
    • 피신고자의 카운트가 k 이상이면 answer[신고자 index]++ 해준다.

 

소스 코드:

import java.util.*;

public class KakaoBlind2022_1 {

    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = {};
        answer = new int[id_list.length];

        Map<String, Set<String>> reports = new HashMap<>(); // <신고자, 피신고자 리스트>
        Map<String, Integer> count = new HashMap<>(); // <피신고자, 신고 횟수>

        for(String pair: report){
            Pair reportPair = parse(pair);
            String reporter = reportPair.reporter;
            String respondent = reportPair.respondent;
            Set<String> respondents = reports.getOrDefault(reporter, new HashSet<>());
            if(!respondents.contains(respondent)){ // 동일한 유저가 같은 유저를 다시 신고한 경우는 무시
                count.put(respondent, count.getOrDefault(respondent, 0)+1);
                respondents.add(respondent);
                reports.put(reporter, respondents);
            }
        }
        for(int i=0;i<id_list.length; i++){
            String reporter = id_list[i];
            int num = 0;
            for(String respondent: reports.getOrDefault(reporter, new HashSet<>())){
                if(count.getOrDefault(respondent,0)>=k) num++;
            }
            answer[i]=num;
        }

        return answer;
    }

    public Pair parse(String report){
        String[] pair = report.split(" ");
        return new Pair(pair[0], pair[1]);
    }

    public class Pair {
        public String reporter;
        public String respondent;

        public Pair(String reporter, String respondent) {
            this.reporter = reporter;
            this.respondent = respondent;
        }
    }
}
반응형
Comments