-
프로그래머스 - 신고 결과 받기제로부터 C# 코딩테스트 2023. 12. 16. 19:51728x90
문제 요약.
유저가 다른 유저를 신고했을때, 신고 당한 횟수가 정지 기준 이상이 되면 신고한 유저에게 처리 결과 메일을 보냅니다.
각 유저가 받은 메일의 수를 구하는 문제 입니다.
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'제로부터 C# 코딩테스트' 카테고리의 다른 글
LeetCord - 733. Flood Fill (0) 2024.01.10 LeetCord - 84. Largest Rectangle in Histogram (0) 2024.01.09 프로그래머스 소수 만들기 (0) 2023.11.29 프로그래머스 - 정수를 나선형으로 배치하기 (1) 2023.11.22 프로그래머스 - 안전지대 (0) 2023.11.21