본문 바로가기

제로부터 C# 코딩테스트

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

728x90

문제 요약.

유저가 다른 유저를 신고했을때, 신고 당한 횟수가 정지 기준 이상이 되면 신고한 유저에게 처리 결과 메일을 보냅니다.

각 유저가 받은 메일의 수를 구하는 문제 입니다.

 

1. 유저 클래스를 만듭니다.

 

public class User
{
	public List<string> report;
	public List<string> reported;
	int receivedCount;
        
	public User()
	{
		report = new List<string>(); //신고함
		reported = new List<string>(); //신고당함
		receivedCount = 0;
	}
    	//---------------------------------------신고 처리
   	    
        public void AddReport(string userName){
            report.Add(userName);
        }
        
        public void AddReported(string userName){
            reported.Add(userName);
        }
        
        public bool ReportListCheck(string reportName){
            return report.Contains(reportName);
        }
         public bool ReportedListCheck(string reportedName){
            return reported.Contains(reportedName);
        }
        
        //---------------------------------------신고 처리
        
        public void AddReceived(){
            receivedCount++;
        }
 
}

2.딕셔너리를 만들고 초기화 해줍니다.

 Dictionary<string,User> userDic = new Dictionary<string,User>();
	for(int i = 0; i< id_list.Length;i++)
	{
		userDic[id_list[i]] = new User();
	}

3. report 의 길이 만큼 돌면서 딕셔너리를 업데이트 해줍니다.

for(int i = 0; i < report.Length;i++)
{
	string[] split = report[i].Split(' ');
    
	if(!userDic[split[0]].ReportListCheck(split[1]))
	{
	userDic[split[0]].AddReport(split[1]);
	}
    
	if(!userDic[split[1]].ReportedListCheck(split[0]))
	{
	userDic[split[1]].AddReported(split[0]);
	}
 }

4. 신고 처리를 완료 했으면 각 유저의 신고받은 횟수를 확인해 정지기준 이상이면 자신을 신고한 유저에게 메일을 보내줍니다.

for(int i = 0; i< id_list.Length;i++)
{
	if(userDic[id_list[i]].reported.Count >=k)
	{
		foreach(string user in userDic[id_list[i]].reported)
		{
			userDic[user].AddReceived();
		}
	}
}

5. 각 유저의 신고 처리 메일 받은 횟수를 anwer에 넣어줍니다.

 

 

using System;
using System.Collections.Generic;


public class Solution {
    public int[] solution(string[] id_list, string[] report, int k) {
        int[] answer = new int[id_list.Length];
        Dictionary<string,User> userDic = new Dictionary<string,User>();
        
        for(int i = 0; i< id_list.Length;i++){
            userDic[id_list[i]] = new User();
            
        }
        
        for(int i = 0; i < report.Length;i++){
            string[] split = report[i].Split(' ');
            if(!userDic[split[0]].ReportListCheck(split[1])){
                userDic[split[0]].AddReport(split[1]);
            }
            if(!userDic[split[1]].ReportedListCheck(split[0])){
                userDic[split[1]].AddReported(split[0]);
            }
            
        }
        
        for(int i = 0; i< id_list.Length;i++){
            if(userDic[id_list[i]].reported.Count >=k){
                foreach(string user in userDic[id_list[i]].reported){
                    userDic[user].AddReceived();
                }
            }
        }
    
       for(int i = 0; i<id_list.Length;i++){
           answer[i] = userDic[id_list[i]].GetReceivedCount();
       } 
 
        return answer;
    }
    
    public class User{
       public List<string> report;
       public List<string> reported;
        int receivedCount;
        
        public User(){
            report = new List<string>(); //신고함
            reported = new List<string>(); //신고당함
            receivedCount = 0;
        }
        
        public void AddReport(string userName){
            report.Add(userName);
        }
        
        public void AddReported(string userName){
            reported.Add(userName);
        }
        
        public void AddReceived(){
            receivedCount++;
        }
        
        public bool ReportListCheck(string reportName){
            return report.Contains(reportName);
        }
         public bool ReportedListCheck(string reportedName){
            return reported.Contains(reportedName);
        }
        public int GetReceivedCount(){
            return receivedCount;
        }
       
        
    }
}
728x90