그럴듯한 개발 블로그
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

처음 풀이 이름 = 횟수로 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 문젠데 카카오 문제라 다른 동레벨문제보단 어려웠다.

반응형
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!