https://programmers.co.kr/learn/courses/30/lessons/92334

 

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

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

programmers.co.kr

#include <string>
#include <vector>
#include <sstream>
#include <set>
#include <map>
#include <algorithm>

using namespace std;

vector<string> split(string sentence, char Seperator)
{
	vector<string> answer;
	stringstream ss(sentence);
	string tmp;

	while (getline(ss, tmp, Seperator))
	{
		answer.push_back(tmp);
	}

	return answer;
}

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    
	vector<int> answer(id_list.size(), 0);
	vector<int> report_list(id_list.size(), 0);	// 신고 당한 횟수
	set<string> remove_overlap;	// 중복 제거할 set 변수
	map<int, vector<int>> check_list;	// 누굴 신고했는지

	// 중복 제거
	for (auto x : report) { remove_overlap.insert(x); }

	// Parsing 및 신고당한 횟수
	for (auto report_tmp : remove_overlap)
	{
		// Parsing
		vector<string> split_report = split(report_tmp, ' ');

		// 신고당한 횟수 Up
		int reported = find(id_list.begin(), id_list.end(), split_report[1]) - id_list.begin();
		report_list[reported] += 1;

		// 신고한 사람 등록
		int reporter = find(id_list.begin(), id_list.end(), split_report[0]) - id_list.begin();
		check_list[reporter].push_back(reported);
	}

	// 신고한 사람한테 안내메일 (k회 이상 신고당한 사람)
	for (auto check : check_list)
	{
		int reporter = check.first;	// 신고한 사람
		// check.second : 신고당한 사람
		for (int i = 0; i < check.second.size(); i++)
		{
			if (report_list[check.second[i]] >= k)
			{
				answer[reporter] ++;
			}
		}
	}

	return answer;
}

'알고리즘 > Coding Test' 카테고리의 다른 글

음양 더하기 C++  (0) 2022.05.19
없는 숫자 더하기 C++  (0) 2022.05.19
키패드 누르기 C++  (0) 2022.05.19
숫자 문자열과 영단어 C++  (0) 2022.05.18
신규 아이디 추천 C++  (0) 2022.05.18

+ Recent posts