알고리즘/구현

2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기

naksnaks 2022. 6. 5.
반응형

[문제링크]

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

 

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

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

programmers.co.kr


[설명]

이 문제를 단순하게 구현으로 풀었습니다.

1) 한 유저를 여러번 신고할 수 있지만, 신고 횟수는 1회로 처리되기에 Set을 이용하여 중복을 제거했습니다.

2) 각 유저가 신고를 받은 횟수를 report, 신고를 한 횟수를 from으로 처리하여 추가했습니다.

3) 신고를 k회 이상 받은 사람을 Set에 저장했습니다.

4) report를 돌며 신고받은 사람의 ID가 3)의 Set에 포함이 된다면, 신고를 한 사람의 ID에 해당하는 answer에 추가를 했습니다.

 

 

프로그래머스 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 JAVA풀이

 

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        Id[] ids=new Id[id_list.length];
        for(int i=0;i<id_list.length;i++){
            ids[i]=new Id(id_list[i],i,0,0);
        }
        int[] arr = new int[id_list.length];
        
        Set<String> reportSet = new HashSet<>();
        for(int i=0;i<report.length;i++){
            reportSet.add(report[i]);
        }
        String[] reports=new String[reportSet.size()];
        Iterator<String> itera=reportSet.iterator();
        int index=0;
        while(itera.hasNext()){
            reports[index++]=itera.next();
        }
        for(int i=0;i<reports.length;i++){
            String[] s=reports[i].split(" ");
            for(int j=0;j<id_list.length;j++){
                if(s[1].equals(ids[j].name)){
                    ids[j].report++;
                }
                if(s[0].equals(ids[j].name)){
                    ids[j].from++;
                }
            }
        }
        
        Set<String> set=new HashSet<>();
        for(int i=0;i<id_list.length;i++){
            if(ids[i].report>=k){           //해당 유저의 신고받은 횟수가 k이상이면
                set.add(ids[i].name);
            }
        }
        for(int i=0;i<reports.length;i++){
            String[] s = reports[i].split(" ");
            Iterator<String> iter = set.iterator();
            while(iter.hasNext()){
                String temp=iter.next();
                if(temp.equals(s[1])){
                    for(int l=0;l<id_list.length;l++){
                        if(ids[l].name.equals(s[0])){
                            answer[ids[l].index]++;
                        }
                    }
                }
            }
        }
        return answer;
    }
    public class Id{
        String name;
        int index;
        int from;
        int report;
        public Id(String name, int index, int from, int report){
            this.name=name;
            this.index=index;
            this.from=from;
            this.report=report;
        }
    }
}

 

 

 

궁금하신 부분이나 부족한 점은 댓글로 알려주시면 감사하겠습니다.

반응형

댓글

💲 추천 글