Spicy Tuna Sushi
본문 바로가기
문제를 풀자

[프로그래머스] 신고 결과 받기(C++)

by 말린malin 2022. 6. 22.

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

 

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

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

programmers.co.kr

 

인덱스로 int가 아닌 다른 자료형을 사용할 수 있는 map,

map과 유사하지만 key만 있고 value는 없는 set을 활용했다.

 

신고된 ID와 신고횟수를 저장하는 map

신고한 ID와 신고된 ID를 저장하는 map을 선언한다.

 

report를 신고한 ID(from)와 신고된 ID(to)로 파싱한 뒤

중복 신고가 아닐 경우 각 map에 정보를 저장한다.

 

그 후 자신(s)이 신고한 사람(str)이 k번 이상 신고당한 사람이라면(report_cnt[str]>=k) cnt++

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

using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;

    map<string, int> report_cnt;//신고된 ID, 신고횟수
    map<string, set<string>> report_list;//신고한 ID, 신고된 ID 

    for (string s : report) //parsing
    {
        int blank = s.find(' ');
        string from = s.substr(0, blank);
        string to = s.substr(blank);

        if (report_list[from].find(to) == report_list[from].end()) {
            //중복신고가 아닐 경우
            report_cnt[to]++;
            report_list[from].insert(to);
        }
    }

    for (string s : id_list)
    {
        int cnt = 0;

        // 자신이 신고한 사람이 k번 이상 신고 당한 사람이라면
        // 결과메일++
        for (string str : report_list[s])
        {
            if (report_cnt[str] >= k)
                cnt++;
        }

        answer.push_back(cnt);
    }

    return answer;
}

출처 : https://yjyoon-dev.github.io/kakao/2022/01/15/kakao-2022-blind-01/

 

[프로그래머스] 신고 결과 받기 풀이 (2022 카카오 코딩테스트)

프로그래머스 - 신고 결과 받기 C++ 풀이 (2022 카카오 블라인드 채용 1차 코딩테스트)

yjyoon-dev.github.io

 

댓글