-
프로그래머스 - 베스트앨범알고리즘 풀이/프로그래머스 2020. 1. 1. 15:58
문제 : https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범 | 프로그래머스
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 play
programmers.co.kr
풀이 :
1. 해쉬 맵을 통하여 한 장르에 모든 재생수를 구해주고 이 해쉬를 정렬하기 위한 v벡터와
각각의 재생수와, 인덱스, 장르 이름을 가지는 v2벡터를 만든다.
2. v와 v2는 내림차순으로 정렬한다.
3. v의 첫번째부터 v [i]의 문자열을 뽑은 후 v2를 돌면서 같은 문자열이 있다면 2번만 answer에 push
해준다.
코드 ( C++ )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <iostream> #include <string> #include <vector> #include <algorithm> #include <map> #include <tuple> using namespace std; bool compare(tuple<int, int, string> a, tuple<int, int, string> b) { int x1, x2; string x3; tie(x1, x2, x3) = a; int y1, y2; string y3; tie(y1, y2, y3) = b; return x1 > y1; } vector<int> solution(vector<string> genres, vector<int> plays) { vector<int> answer; map<string, int> m; // m을 정렬하기 위한 v 벡터 vector<pair<int, string>> v; // 재생 수와, 인덱스, 장르 이름을 가지는 v2벡터 vector<tuple<int, int, string>> v2; for (int i = 0; i < genres.size(); ++i) { m[genres[i]] = plays[i]; v2.push_back(make_tuple(plays[i], i, genres[i])); } for (auto x : m) { v.push_back({ -x.second, x.first }); } // -을 붙여서 내림차순 정렬과 같게 만든다. std::sort(v.begin(), v.end()); // 재생수 내림차순으로 정렬한다. std::sort(v2.begin(), v2.end(), compare); for (int i = 0; i < v.size(); ++i) { string who; who = v[i].second; int cnt = 2; for (int j = 0; j < v2.size(); ++j) { // 딱 두번만 cnt는 2부터 ~ 0 까지 if (cnt == 0) break; // 재생수 , 인덱스 int play, idx; // 장르 이름 string name; tie(play, idx, name) = v2[j]; if (name == who) { answer.push_back(idx); cnt--; } } } cout << endl; return answer; } '알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 종이접기 (0) 2020.04.11 프로그래머스 - 다리를 지나는 트럭 (0) 2019.12.14 프로그래머스 - H-Index (0) 2019.12.08 프로그래머스 - 숫자 야구 (0) 2019.12.06 프로그래머스 - 위장 (0) 2019.12.05