Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

언리얼 공부 블로그

코드카타 : 신고 결과 받기, 최댓값과 최솟값, JadenCase 본문

카테고리 없음

코드카타 : 신고 결과 받기, 최댓값과 최솟값, JadenCase

maypawn 2025. 9. 10. 11:00

 

  1. 유저가 최종적으로 받은 처리 결과 메일의 개수 계산, 결과를 배열에 순서대로 담아 retrun
  2. report 벡터에 있는 신고 기록을 map에 저장, 저장한 신고기록으로 정지 될 사람과 메일을 받을 사람을 map으로 저장,
  3. id_list 를 저장한 정지 될 사람과 메일을 받을 사람을 ID에 맞춰 메일 보내기
#include <string>
#include <vector>
#include <map>
#include <set>
#include <sstream>

using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;
    map<string, set<string>> reported_info; // 신고 기록 저장 
    map<string, int> mail_counts; // 유저 별 받을 메일 수 저장
    
    // report 벡터 순회 후 신고기록을 중복 제거하여 reported_info 에 저장 
    for (const string& r : report) {
        // stringstream 으로 문자열 r 준비
        stringstream ss(r);
        string reporter_id, reported_id;
        // 문자열에서 ID 분리
        ss >> reporter_id >> reported_id;
        // 분리한 ID 사용하여 map 기록
        reported_info[reported_id].insert(reporter_id);
    }
    // reported_info 의 map을 이용해 정지될 사람과 메일을 받을 사람을 저장
    for (auto const& [reported_user, reporters] : reported_info) {
        // 신고당한 횟수 k 이상인지 확인
        if (reporters.size() >= k) {
            for (const string& reporter_id : reporters) {
                mail_counts[reporter_id]++;
            }
        }
    }
    // id_list 순회해 mail_counts 맵에서 ID에 해당하는 메일을 찾아 넣어주기
    for (const string& id : id_list) {
        answer.push_back(mail_counts[id]);
    }
    
    return answer;
}

 

최댓값과 최솟값

  • 문자열 s를 벡터로 저장하고, sort 오름차순으로 정렬해 첫번째, 마지막을 string으로 가져오기. 

 

#include <string>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;
string solution(string s) {
    string answer = "";
    
    // 문자열 s 를 vector 로 저장
    stringstream ss(s);
    vector<int> numbers;
    int num;
    // ss 에서 공백 기준으로 숫자를 읽어 num에 저장
    while (ss >> num) {
        numbers.push_back(num);
    }
    // 최대값 최소값 찾기
    sort(numbers.begin(), numbers.end());
    answer += to_string(numbers.front());
    answer += " ";
    answer += to_string(numbers.back());
    
    return answer;
}

 

 

JadenCase

  1. 문자열 가장 첫글자 대문자로 변경,
  2. 공백인 경우 다음 글자는 대문자,
  3. 둘 다 아닌경우 소문자로 변경하기
#include <string>
#include <vector>
#include <cctype>

using namespace std;

string solution(string s) {
    string answer = "";
    
    bool is_start_of_word = true;
    
    // string s 내 모든 단어 확인
    for(int i = 0; i < s.length(); ++i) {
        // string s 의 단어가 공백인 경우, is_start_of_word = true,
        if (s[i] == ' ') {
            is_start_of_word = true;
        }
        // 단어가 문자인 경우, 현재 문자를 대문자로 변경 후 is_start_of_word = false로 변경
        else if (is_start_of_word) {
            s[i] = toupper(s[i]);
            is_start_of_word = false;
        }
        // 단어 중간 문자일 때는 소문자로 변경
        else {
            s[i] = tolower(s[i]);
        }
    }
    answer = s;
    return answer;
}