본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스 신고결과받기] c++ (풀이,코드)

by 말린밴댕이_공부 2023. 7. 5.
반응형

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/92334?language=cpp 

 

프로그래머스

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

programmers.co.kr

 

문제

 

코드, 풀이

프로그래머스 level1에서 가장 정답률이 낮은 문제인데요.

 

카카오 문제는 문자열 처리때문에 극혐하지만 그래도 이번에 진행해봤습니다..ㅎ

 

저의 풀이는 이런식으로 풀었습니다.

 

1. 맵에 string,int로 id_list와 인덱스를 받아왔습니다. (나중에 int로 처리하기 편하게 하기 위해)

 

2. report를 돌게 되면서 신고자와 피신고자를 받아와 vector에 1번에 저장한 맵을 이용해 신고건에 대해 1로 갱신합니다.

 

3. 신고를 당한 것에 대해서 반복문을 돌면서 갯수가 넘게 되면 넘은 것에 대해서 신고를 한자에 answer[j] ++; 을 해줍니다.

 

물론 코드가 조금은 더러워 보이고 개인적인 피드백으로는 sstream을 활용하여 토큰별로 잘라 사용하는 것에 대해서 안한것이 아쉽습니다.

 

하지만 시간적이나 메모리적으로 프로그래머스 상위 좋아요와 비교하여 더욱 짧고 조금 차지하여 코드를 다듬지 않았지만 이정도로 만족하고 넘어가볼까 합니다 ..ㅎ

 

 

#include <string>
#include <vector>
#include <map>

using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer(id_list.size(),0);
    map<string,int> m;
    vector<vector<int>> v(id_list.size(), vector<int>(id_list.size(),0)); //신고자
   
    for(int i = 0; i < id_list.size();i++){
        m[id_list[i]] = i;
    }
   
    for(int i = 0; i < report.size();i++){
        int active = 0; //신고자
        int passive = 0; //피신고자
        string activeUser = "";
        string passiveUser = "";
        int j = 0;
        int first = 1;
        while(j < report[i].length()){
            if(report[i][j] == ' '){
                first = 0;
                j++;
            }
            if(first)
                activeUser += report[i][j];
            else
                passiveUser += report[i][j];
            j++;
        }
        v[m[activeUser]][m[passiveUser]] = 1;
    }
    for(int i = 0; i < v.size();i++){
        int cnt = 0;
        for(int j = 0; j < v.size();j++){
            if(v[j][i] == 1){
                cnt++;
            }
        }
        if(cnt >= k){
            for(int j = 0; j < v.size();j++){
                if(v[j][i] == 1)
                    answer[j] ++;
            }
        }
    }
    return answer;
}
반응형

댓글