알고리즘/프로그래머스
[프로그래머스/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