반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- node.js
- 안드로이드스튜디오
- 몰입캠프
- 우선순위큐
- 리사이클러뷰
- 몰입캠프후기
- 자바스크립트
- 프로그래머스
- 백준
- 자바
- DP
- 앱개발
- 카이스트맛집
- 위상정렬
- 후기
- 궁동
- 카이스트
- computergraphics
- MySQL
- 컴퓨터그래픽스
- BFS
- glfw
- html
- 알고리즘
- nodeJS
- 타입스크립트
- 프래그먼트
- 대전맛집
- 분리집합
- 어은동맛집
Archives
- Today
- Total
소근소근
[프로그래머스 - 베스트앨범] 해시 C++ 본문
728x90
반응형
SMALL
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <map>
using namespace std;
map <string , int> genKey;
map <int , int> getCount;
vector <pair<int,int>> genNum;
vector<pair<int,int>> v[100];
bool comp(const pair<int,int>&a , const pair<int,int>&b){
if(a.first == b.first)
return a.second > b.second;
return a.first < b.first;
}
vector<int> solution(vector<string> gen, vector<int> plays) {
vector<int> answer;
int tmp = 0;
for(int i=0;i<gen.size();i++){
string gen_name = gen[i];
if(genKey.find(gen_name) == genKey.end()){
genKey[gen_name] = ++tmp;
getCount[tmp] = plays[i];
}else{
int exist = genKey[gen_name];
getCount[exist] += plays[i];
}
}
for(int i=1;i<=tmp;i++){
int cnt = getCount[i];
genNum.push_back({cnt,i}); // {장르별 음악 수 , 장르 key}
}
for(int i=0;i<gen.size();i++){
string gen_name = gen[i];
int gennum = genKey[gen_name];
v[gennum].push_back({plays[i] , i}); //{재생 횟수 , 인덱스}
}
sort(genNum.begin(),genNum.end());
reverse(genNum.begin(),genNum.end()); //내림차순 정렬을 위해서
for(int i=0;i<genNum.size();i++){
int gennum = genNum[i].second;
sort(v[gennum].begin(),v[gennum].end() , comp); //custom sort
if(v[gennum].size() == 1){
answer.push_back(v[gennum][0].second);
continue;
}
int cnt = 1;
for(int j= v[gennum].size()-1 ; cnt<=2 ;j--){
answer.push_back(v[gennum][j].second);
cnt ++;
}
}
return answer;
}
vector <pair<int,int>> 에서 음악 재생 수는 오름차순, 음악 인덱스는 내림차순으로 정렬하기 위해 custom sort를 해주었다.
케이스 다 맞긴 했지만 코드가 마음에 들진 않는다 ..
예외처리 하는거 까먹어서 계속 틀리다가 나중에 발견했다.
1) 음악 재생 수가 같을 때는 작은 인덱스 먼저,
2) 장르에 음악이 한 개 일때는 하나만 출력한다
728x90
반응형
LIST
'Algorithm' 카테고리의 다른 글
[프로그래머스 - 네트워크] BFS, 분리집합(disjoint set) Union & Find C++ (0) | 2022.01.08 |
---|---|
[프로그래머스 - 타겟 넘버] BFS C++ (0) | 2022.01.08 |
[백준 BOJ 4195 glod2 - 친구 네트워크] 해시, 분리집합(disjoint set / union find) C++ (0) | 2022.01.05 |
[알고리즘/자료구조] 분리 집합( Disjoint Set (a.k.a Union & Find) ) 코드 구현 C++ , 집합 크기 구하기 (0) | 2022.01.05 |
[백준 BOJ 13711 glod1 - LCS4] Longest Common String (LCS) C++ (0) | 2022.01.04 |