알고리즘/프로그래머스

[프로그래머스/c++] 신고 결과 받기

녕이 2022. 3. 31. 23:50
728x90

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

 

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

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

programmers.co.kr

 

 

문자열 분리하는 방법으로, split() 함수를 사용했다.

#include <sstream>

//split names
string str = report[i];
istringstream ss(str);
string buffer;
while(getline(ss, buffer, ' ')){
    name.push_back(buffer);
}

name 백터에 ' '을 기준으로 나뉜 문자열을 넣어줬다.

 

 


 

 

#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <algorithm>

using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;
    vector<string> name;
    vector<string> byWhom[id_list.size()];
    int cnt[id_list.size()];
    for(int i=0; i<id_list.size(); i++) {
        cnt[i] = 0;
        answer.push_back(0);
    }
    
    //1. report 배열 돌면서 유저 당 신고된 횟수 카운팅 (같은 유저한테 신고당했으면 1번으로 처리)
    //만약 byWhom 배열에 이미 동일한 사람이 들어있다면 cnt 증가하지 않음
    for(int i=0; i<report.size(); i++){
        //split names
        string str = report[i];
        istringstream ss(str);
        string buffer;
        while(getline(ss, buffer, ' ')){
            name.push_back(buffer);
        }
        
        //신고당한 사람 index 구하기
        auto it = find(id_list.begin(), id_list.end(), name[1]);
        int index = it - id_list.begin();
        
        //만약 유저가 이미 신고했다면
        auto it2 = find(byWhom[index].begin(), byWhom[index].end(), name[0]);
        if(it2 == byWhom[index].end()) { //만약 유저가 신고한 적이 없다면
            byWhom[index].push_back(name[0]);
            cnt[index]++;
        }
        
        name.clear(); //초기화
    }

    //2. cnt 배열 돌면서
    for(int i=0; i<id_list.size(); i++){
        if(cnt[i] >= k){
            for(auto j = byWhom[i].begin(); j != byWhom[i].end(); j++){
                auto k = find(id_list.begin(), id_list.end(), *j);
                int in = k-id_list.begin();
                answer[in]++;
            }
        }
    }
    return answer;
}

 

주어진 문제를 잘 읽고 조건들을 맞춰주면 되는 문제였다.

 

728x90