https://school.programmers.co.kr/learn/courses/30/parts/12077
#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;
}
'<algorithm> > 프로그래머스_고득점 kit' 카테고리의 다른 글
[프로그래머스 고득점kit] 스택/큐_기능개발(c++) (0) | 2023.04.09 |
---|---|
[프로그래머스 고득점kit] 스택/큐_같은 숫자는 싫어(c++) (0) | 2023.04.09 |
[프로그래머스 고득점kit] 해시_위장(c++) (0) | 2023.04.06 |
[프로그래머스 고득점kit] 해시_전화번호 목록(c++) (0) | 2023.04.01 |
[프로그래머스 고득점kit] 해시_완주하지 못한 선수(c++) (2) | 2023.03.31 |