본문으로 바로가기

Description

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

  • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
    • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
    • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
    • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2(즉, 2번 이상 신고당하면 이용 정지)인 경우의 예시입니다.

Solotion.1

public int[] solution(String[] id_list, String[] report, int k) {

    // set User Info
    int userCnt = id_list.length;
    HashMap<String,User> users = new HashMap<>();
    for (int i = 0; i < userCnt; i++) {   //initialize users
        users.put(id_list[i], new User(id_list[i]));
    }

    // set Report Info
    Set<String> stoppedUserIds = new HashSet<>(); // 정지 대상 유저 목록
    for (String r : report){
        String[] arr = r.split(" ");
        if(users.get(arr[0]).reportedUser.add(arr[1])){ // 신고 유저목록추가 >>  들어가 있지 않으면 count++
            users.get(arr[1]).reportedCnt++;
            if(users.get(arr[1]).reportedCnt >= k){     // k이상이면 정지대상 유저 목록에 추가
                stoppedUserIds.add(users.get(arr[1]).id);
            }
        }
    }

    //set result
    int[] result = new int[userCnt];
    for (int i = 0; i < userCnt; i++) {
        for(String stoppedUserId : stoppedUserIds){
            if(users.get(id_list[i]).reportedUser.contains(stoppedUserId)){
                result[i]++;
            }
        }
    }
    return result;
}

private class User{

    private String id;
    private Set<String> reportedUser; // 신고한 유저 목록 (중복X)
    private int reportedCnt;          // 신고 당한 횟수

    public User(String _id){
        this.id = _id;
        reportedUser = new HashSet<>();
    }
}

객체지향적으로 User Class를 만들어 처리하는 코드입니다. 각 유저별로 id와 신고한 유저목록, 신고 당한 횟수를 가지고 있고 report 배열 데이터를 분석하여 각각 데이터를 세팅해 줍니다. 주의할 점은 한 사람이 같은 사람을 신고 할 경우에는 Set를 활용해 put()반환값이 false일 경우는 신고횟수를 추가하지 않아야 합니다.

Reference

 

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

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

programmers.co.kr