개발자 피터
Peter's Dev Blog
개발자 피터
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • 🧑🏻‍💻 Develop (13)
      • Devops (3)
      • Elasticsearch (3)
      • Design Pattern (1)
      • SQL (4)
      • Architecture (1)
      • APM (1)
    • 💻 Service (7)
      • E-ROOM (3)
      • Briefing (4)
    • 💡 Problem Solving (43)
      • Baekjoon (40)
      • Programmers (2)
    • 📚 Reading (12)
      • Tech (9)
      • Self-Help (3)
    • 💬 Etc (1)
    • 📈 Retrospective (1)

블로그 메뉴

  • 🌟 깃허브
  • 🏷️ 태그 클라우드
  • 📝 방명록

공지사항

인기 글

태그

  • java
  • E-ROOM
  • 구현
  • 그리디
  • boj
  • 문자열
  • Programmers
  • elasticsearch
  • MySQL
  • 백준
  • 브루트포스
  • 백트래킹
  • SQL
  • 독서
  • briefing

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자 피터

Peter's Dev Blog

💡 Problem Solving/Programmers

[프로그래머스] 신고 결과 받기 [C++]

2023. 10. 17. 02:29
728x90
반응형

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 

2. 풀이

문제의 주어진 조건대로 구현하면 되는 문제입니다.

User라는 클래스를 만들어서 사용했습니다.

코드에 대한 설명은 주석으로 작성했습니다.

 

3. 코드

#include <string>
#include <vector>
#include <set>
#include <iostream>

using namespace std;

class User {
public:
    string name; // 해당 유저의 이름
    set<string> reportUserList; // 해당 유저가 신고한 사람 목록
    int reportedCount = 0; // 해당 유저가 신고당한 횟수
    User(string name) {
        this->name = name;
    }
    int receivedMail = 0;
};

vector<string> split(string str) {
    int spacePosition = str.find(' ');
    
    vector<string> ret;
    ret.push_back(str.substr(0, spacePosition));
    ret.push_back(str.substr(spacePosition+1));
    
    // 공백 기준으로 문자열을 나누어 반환
    return ret;
}

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;
    vector<User> userList;
    
    // 유저 인스턴스들 생성
    for(int i=0; i<id_list.size(); i++) {
        userList.push_back(User(id_list[i]));
    }
    
    // 각 유저가 신고한 사람들의 목록을 생성
    for(int i=0; i<report.size(); i++) {
        vector<string> parsedReport = split(report[i]);
        string reporter = parsedReport[0];
        string reportee = parsedReport[1];
        
        for(int j=0; j<id_list.size(); j++) {
            // 신고자의 신고 목록에 reportee를 추가해준다.
            if(userList[j].name == reporter) {
                if(userList[j].reportUserList.find(reportee) == userList[j].reportUserList.end()){
                    userList[j].reportUserList.insert(reportee);
                }
            }
        }
    }
    
    // 각 유저별로 몇 번 신고되었는지 계산
    for(int i=0; i<id_list.size(); i++) {
        string myName = userList[i].name;
        for(int j=0; j<id_list.size(); j++) {
            if(userList[j].reportUserList.find(myName) != userList[j].reportUserList.end()) {
                userList[i].reportedCount++;
            }
        }
    }

    vector<string> stoppedUser;
    
    // k번 이상 신고된 유저를 정지 목록에 추가
    for(int i=0; i<id_list.size(); i++) {
        if(userList[i].reportedCount >= k) {
            stoppedUser.push_back(userList[i].name);
        }    
    }
    
    // 정지된 유저를 신고한 사람들에게 메일 횟수를 증가시킴
    for(int i=0; i<stoppedUser.size(); i++) {
        string stoppedUserName = stoppedUser[i];
        for(int j=0; j<id_list.size(); j++) {
            if(userList[j].reportUserList.find(stoppedUserName) != userList[j].reportUserList.end()) {
                userList[j].receivedMail++;
            }
        }
    }
    
    // 각 유저가 받은 메일의 수를 결과로 반환
    for(int i=0; i<id_list.size(); i++) {
        answer.push_back(userList[i].receivedMail);
    }
    
    return answer;
}
728x90
반응형
저작자표시 (새창열림)

'💡 Problem Solving > Programmers' 카테고리의 다른 글

[프로그래머스] 체육복 [C++]  (0) 2023.10.17
    '💡 Problem Solving/Programmers' 카테고리의 다른 글
    • [프로그래머스] 체육복 [C++]
    개발자 피터
    개발자 피터
    Backend Engineer 🔥

    티스토리툴바