[프로그래머스] 신고 결과 받기 (C++, 카카오)
10641 단어 programmerskakaokakao
요 몇일간 면접, 인적성, 필기 등 각종 시험이 겹쳐서 블로그에 게시하지 못했다..
좀 더 열심히 해봐야겠다!
이 문제는 map, set 자료구조를 이용해 풀었다.
map을 쓴 이유는 key-value 형태여서 신고 횟수를 저장하기에 적당할 것 같아서 사용했고,
set은 중복을 처리해주기 위해 사용했다.
문제 해결 방법은 다음과 같다.
- map<string, set>으로 선언해, 신고 받은자와 신고자를 동시에 저장할 수 있게 해준다.
- report를 돌면서 신고자와 신고 받은자를 저장해준다.
- 전체 id_list를 돌면서 저장했던 신고자가 k 이상일 경우, set을 돌면서 별도의 배열에 신고자를 체크해준다.
#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
// map으로 신고받은 자와 신고자를 연결해준다.
map<string, set<string>> alert;
// 나중에 신고자를 계산할 때 쓰는 별도의 배열
int mail[1001];
for (int i = 0; i < 1001; i++) mail[i] = 0;
for (int i = 0; i < report.size(); i++) {
// 공백 기준으로 잘라서
int index = report[i].find(" ");
// 신고자에 신고 받은자를 set에 담아준다.
alert[report[i].substr(index + 1)].insert(report[i].substr(0, index));
}
// 전체 list를 돌면서
for (int i = 0; i < id_list.size(); i++) {
// 신고자가 k 이상이면
if (alert[id_list[i]].size() >= k) {
// set을 돌면서 별도의 배열에 신고자를 체크해준다.
for (auto it = alert[id_list[i]].begin(); it != alert[id_list[i]].end(); it++) {
int index = find(id_list.begin(), id_list.end(), *it) - id_list.begin();
mail[index]++;
}
}
}
for (int i = 0; i < id_list.size(); i++) {
answer.push_back(mail[i]);
}
return answer;
}
Author And Source
이 문제에 관하여([프로그래머스] 신고 결과 받기 (C++, 카카오)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@khc41/프로그래머스-신고-결과-받기-C-카카오저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)