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

https://school.programmers.co.kr/learn/courses/30/parts/12077

 

프로그래머스

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

programmers.co.kr

#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>

using namespace std;

bool    greater_plays(pair<string, int> a, pair<string, int> b)
{
    return (a.second > b.second); // 내림차순으로 정렬
}

bool unique_greater_plays(pair<int, int> a, pair<int, int> b)
{
    if (a.second == b.second)
        return a.first < b.first;// 고유번호 낮은 순
    return (a.second > b.second); // 내림차순으로 정렬
}

vector<int> solution(vector<string> genres, vector<int> plays) {
    vector<int> answer;
    unordered_map<string, int> map;
    
    for (int i = 0; i < genres.size(); i++)
    {
        if (map.find(genres[i]) == map.end()) // 없으면
            map[genres[i]] = plays[i];
        else
            map[genres[i]] += plays[i];
    }
    vector<pair<string, int> > v_map(map.begin(), map.end()); // 벡터로 복사
    sort(v_map.begin(), v_map.end(), greater_plays); // genre, plays합 을 plays합 순으로 정렬
    for (int i = 0; i < v_map.size(); i++)
    {
        vector<pair<int, int> > temp; // 각 장르에 해당하는 plays, 고유번호 벡터
        for (int j = 0; j < plays.size(); j++)
            if (v_map[i].first == genres[j])
                temp.push_back(make_pair(j, plays[j]));
        sort(temp.begin(), temp.end(), unique_greater_plays);
        for (int k = 0; k < temp.size() && k < 2; k++) 최대 두개만 담기
            answer.push_back(temp[k].first);
    }
    return answer;
}

진짜 더럽게 어렵다.. 그래도 이제 프로그래머스 웹 환경에 좀 익숙해진 것 같다.

 

//문제 제대로 안보고 풀다가 장르도 두 개 곡도 두 개인 줄 알고 계속 틀렸다 곡만 두 개 한정이었다 ㅂㄷㅂㄷ.... 아래 망한 코드 첨부...

#include <string> // 망한코드 
#include <vector>
#include <algorithm>
#include <unordered_map>

using namespace std;

bool    greater_plays(pair<string, int> a, pair<string, int> b)
{
    return (a.second > b.second); // 내림차순으로 정렬
}

bool unique_greater_plays(pair<int, int> a, pair<int, int> b) {
    if (a.second == b.second)
        return a.first < b.first;// 고유번호 낮은 순
    return (a.second > b.second); // 내림차순으로 정렬
}

vector<int> solution(vector<string> genres, vector<int> plays) {
    vector<int> answer;
    unordered_map<string, int> map;
    
    for (int i = 0; i < genres.size(); i++)
    {
        if (map.find(genres[i]) == map.end()) // 없으면
            map[genres[i]] = plays[i];
        else
            map[genres[i]] += plays[i];
    }
    vector<pair<string, int> > copy_map(map.begin(), map.end()); // 벡터로 복사
    sort(copy_map.begin(), copy_map.end(), greater_plays);
    
    vector<pair<int, int> > v_first, v_second;
    for (int i = 0; i < genres.size(); i++)
    {
        if (genres[i] == copy_map[0].first) // 첫번째로 큰 plays 장르면
            v_first.push_back(make_pair(i, plays[i])); // v_first에 추가
        else if (genres[i] == copy_map[1].first) // 두번째로 큰 plays 장르면
            v_second.push_back(make_pair(i, plays[i])); // v_second에 추가
    }
    sort(v_first.begin(), v_first.end(), unique_greater_plays); // 고유번호 오름차순,
    sort(v_second.begin(), v_second.end(), unique_greater_plays); // plays 내림차순으로 정렬
    for (int i = 0; i < v_first.size() && i < 2; i++)
        answer.push_back(v_first[i].first);
    for (int i = 0; i < v_second.size() && i < 2; i++)
        answer.push_back(v_second[i].first);
    return answer;
}
반응형
profile

그럴듯한 개발 블로그

@donghyk2

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