제로부터 C# 코딩테스트
프로그래머스 - 신고 결과 받기
휘게31
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