프로그래밍/코테

[프로그래머스] 베스트앨범 Lv. 3

jinkwon.kim 2022. 7. 1. 01:02
728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/42579

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

풀이 원리

    장르를 unordered_map으로 분리 후 장르별 데이터를 vector을 이용하여 value , index 쌍으로 관리하는 것이 핵심

보인은 아래 구조체를 map에 넣어 value, index로 관리

typedef struct info{
    string  name;
    int count = 0;
    std::vector<std::pair<int, int>> v;
} info;

알아야할 코딩 기술

1. unordered_map

    hash 형태로 장르를 빠르게 보관하기위해서 사용합니다. 

2. map의 기본 정렬 

    map의 원소들은 key 값을 기준으로 오름차순 정렬되어있다. 따라서 내림차순으로 정렬하고 싶다면 int 형 기준으로 map<int, int, greater> 를 사용해주면 된다.

// Type your code here, or load an example.
#include<map>
#include<iostream>


int main()
{
    // 기본 : 오름 차순 정렬
    //std::map<int , std::string> m;
    // key_compare 를 사용하여 오름 차순 정렬
    //std::map<int , std::string, std::less<int>> m;
    // key_compare 를 사용하여 내림 차순 정렬
    std::map<int , std::string, std::greater<int>> m;
    m.insert(std::make_pair(3,"1"));
    m.insert(std::make_pair(4,"2"));
    m.insert(std::make_pair(1,"3"));
    m.insert(std::make_pair(2,"4"));


    for (const auto item : m) {
        std::cout << item.first << " : " << item.second << std::endl;
    }
}

3. map을 value 기준으로 sorting 하는 방법

    map을 vector에 넣고 vector를 소팅 한다.

map<char, int> m;
vector<pair<char,  int>> v(m.begin(), m.end());

sort(v.begin(), v.end(), comp);

    값 비교를 위한 사용자 코드

static bool comp(pair<char, int>& a, pair<char, int>& b){
	return a.second < b.second;
}

 

 

 
728x90
반응형