ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 신고 결과 받기
    제로부터 C# 코딩테스트 2023. 12. 16. 19:51
    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
Designed by Tistory.