새소식

코딩테스트/프로그래머스

[C++] 신고 결과 받기

  • -

[문제]

코딩테스트 연습 - 신고 결과 받기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

[문제 풀이]

자신이 신고를 한 유저 중 신고를 k번 이상 당한 유저가 몇명이 있는지를 파악하는 문제이다.

해당 문제를 풀기 위해서 단계에 걸쳐서 문제를 풀었다.

1. 문자열 나누기를 통해서 신고한 유저와 신고당한 유저 나누기.

2. 신고를 한 사람은 같은 사람을 1번만 가능하게 중복 제거하기.

3. 신고를 몇번 당했는지 체크해주기.

4. 만일 신고를 k번 이상 당했다면 신고한 사람의 value 증가해주기.

5. id_list를 방문하면서 해당 사람의 value 값 answer에 넣기.

 

의 다섯 단계로 나누어서 해당 문제를 풀었다.

모두 구현만 하면 되지만 단계를 나누어서 풀기가 처음엔 어려울 수 있으니 차근차근 접근하면서 풀자.

[회고]

카카오 문제는 문자열 이용이 기본으로 들어가서 난이도가 다른 것들보다 더 어렵게 느껴지는 경향이 있다.

JSON 파일 처리에도 문자열 공부는 도움이 되니 꾸준히 풀자.

[코드]

#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <map>
#include <algorithm>
using namespace std;

vector<string> split(string s){
    vector<string> answer;
    char delimeter = ' ';
    string buffer;
    istringstream iss(s);
    
    while(getline(iss,buffer,delimeter)){
        answer.push_back(buffer);
    }    
    return answer;
}

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;

    //신고당한 횟수를 체크해 줄 변수
    map<string ,int > mp;   
    //신고를 한 사람을 체크해 줄 변수
    map<string, int> person;
    //신고한 사람과 신고 당한 사람으로 나눌 변수
    vector<vector<string> > declare;
    
    //1. 신고한 유저와 신고당한 유저 나누기.
    for(int i = 0;i<report.size();i++){
        vector<string> temp;
        temp = split(report[i]);
        declare.push_back(temp);
    }

    //2. 신고를 한 사람은 같은 사람을 1번만 가능하게 중복 제거하기.
    sort(declare.begin(),declare.end());
    declare.erase(unique(declare.begin(),declare.end()),declare.end());
    
    //3. 신고를 몇번 당했는지 체크해주기.
    for(int i = 0;i<declare.size();i++){
        mp[declare[i][1]]++;
    }
    
    //4. 만일 신고를 k번 이상 당했다면 신고한 사람의 value 증가해주기.
    for(int i = 0;i<declare.size();i++){
        if(mp[declare[i][1]] >= k){
            person[declare[i][0]]++;
        }
    }
    
    //5.id_list를 방문하면서 해당 사람의 value 값 answer에 넣기.
    for(int i = 0;i<id_list.size();i++){
        answer.push_back(person[id_list[i]]);
    }
    
    return answer;
}

 

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[C++] 성격 유형 검사하기  (0) 2023.08.15
[Swift] 신고 결과 받기  (0) 2023.08.14
[Swift] 과일 장수  (0) 2023.08.13
[Swift] 달리기 경주  (0) 2023.08.12
[C++] 달리기 경주  (0) 2023.08.12
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.