반응형
https://school.programmers.co.kr/learn/courses/30/lessons/92334
처음 풀이 이름 = 횟수로 map에 담아서 확인해 준다. 근데 c++엔 split이 없는데 매번 구현해서 풀어야 하는 건지..
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
vector<string> split(string s, char sep)
{
vector<string> result;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == sep)
{
result.push_back(s.substr(0, i));
result.push_back(s.substr(i + 1, s.size() - i - 1));
break ;
}
}
return (result);
}
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
unordered_map<string, int> report_map; // 이름 / 신고한 횟수
unordered_map<string, int> reported_map; // 이름 / 신고된 횟수
sort(report.begin(), report.end());
for (int i = 0; i < id_list.size(); i++)
{
report_map[id_list[i]] = 0;
reported_map[id_list[i]] = 0;
}
for (int i = 0; i < report.size(); i++)
{
if (i != 0 && report[i] == report[i - 1]) // 똑같은 사람 신고하면 넘어감
continue ;
vector<string> result = split(report[i], ' ');
reported_map[result[1]] += 1; // 신고당한애 cnt++
if (reported_map[result[1]] >= k) // k번이상 신고먹은놈이면
report_map[result[0]] += 1; // 신고자 cnt++
}
for (int i = 0; i < id_list.size(); i++)
answer.push_back(report_map[id_list[i]]);
return answer;
}
k번째로 신고당한 시점부터 report_map의 cnt가 증가되므로 reported_map을 먼저 완성해 주고 두 번째 반복문에서 report_cnt를 증가시키게 바꿔줬다.
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
vector<string> split(string s, char sep)
{
vector<string> result;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == sep)
{
result.push_back(s.substr(0, i));
result.push_back(s.substr(i + 1, s.size() - i - 1));
break ;
}
}
return (result);
}
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
unordered_map<string, int> report_map; // 이름 / 신고한 횟수
unordered_map<string, int> reported_map; // 이름 / 신고된 횟수
sort(report.begin(), report.end());
for (int i = 0; i < id_list.size(); i++)
{
report_map[id_list[i]] = 0;
reported_map[id_list[i]] = 0;
}
for (int i = 0; i < report.size(); i++)
{
if (i != 0 && report[i] == report[i - 1]) // 똑같은 사람 신고하면 넘어감
continue ;
vector<string> result = split(report[i], ' ');
reported_map[result[1]] += 1; // 신고당한애 cnt++
}
for (int i = 0; i < report.size(); i++)
{
if (i != 0 && report[i] == report[i - 1]) // 똑같은 사람 신고하면 넘어감
continue ;
vector<string> result = split(report[i], ' ');
if (reported_map[result[1]] >= k) // k번이상 신고먹은놈이면
report_map[result[0]] += 1; // 신고자 cnt++
}
for (int i = 0; i < id_list.size(); i++)
answer.push_back(report_map[id_list[i]]);
return answer;
}
조건이 좀 더 빡빡했으면 시간을 들여서 split 한 값들을 넣어준 vector를 만들어서 해결했을 듯하다. 레벨 1 문젠데 카카오 문제라 다른 동레벨문제보단 어려웠다.
반응형
'<algorithm> > 프로그래머스' 카테고리의 다른 글
프로그래머스 신규 아이디 추천 c++ (2) | 2023.05.24 |
---|---|
프로그래머스 성격 유형 검사하기 c++ (0) | 2023.05.24 |
프로그래머스 대충 만든 자판 c++ (2) | 2023.05.22 |
프로그래머스 공원 산책 c++ (0) | 2023.05.22 |
프로그래머스 덧칠하기 c++ (0) | 2023.05.22 |