코딩테스트 연습 > 2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기
10/10

문제 이해 + 전체적인 풀이 흐름 구상 정리

#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
map<string, int>m; // id_list의 이름별로 번호를 매겨서 map에 저장
for(int i =0; i<id_list.size(); i++) m[id_list[i]] = i;
vector<vector<bool>>v(id_list.size(), vector<bool>(id_list.size(), 0));
// 누가 누구를 신고했는지 기록하는 2차원 vector(중복신고 여부 확인 위함)
// v[신고 한 사람][신고 당한 사람]
vector <int> cnt(id_list.size(),0); // 신고 횟수 cnt vector
for(auto r : report){
for(int i =0; i<r.size(); i++){
if(r[i] == ' '){
int p1 = m[r.substr(0, i)]; //신고자
int p2 = m[r.substr(i+1, r.size())]; // 신고 당한사람
if(!v[p1][p2]){ // 최초신고일 경우에만
v[p1][p2] = 1; // 신고한걸로 바꾸기
cnt[p2]++; // 신고 당한 횟수++;
}
break;
}
}
}
vector<int> answer(id_list.size(),0); // 최종 처리 결과 메일 횟수 vector;
for(int i =0; i<cnt.size(); ++i){
if(cnt[i] >= k){
for(int j =0; j<cnt.size(); ++j){
if(v[j][i]) answer[j]++;
}
}
}
return answer;
}

한방에 성공 ☆
'C++ 문제풀기 > 백준-프로그래머스' 카테고리의 다른 글
| 프로그래머스 | 카펫 (0) | 2025.10.28 |
|---|---|
| 프로그래머스 | 가장 많이 받은 선물 (0) | 2025.10.12 |
| 백준 | 1929. 소수 구하기 (0) | 2025.10.08 |
| 백준 | 11726. 2xn 타일 (0) | 2025.10.08 |
| 백준 | 1463. 1로 만들기 (0) | 2025.10.08 |