일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 분할정복
- 부주상골
- 부주상골증후군
- 카카오코테
- 카카오인턴십
- 세브란스
- 프로그래머스
- c++
- 독일어독학
- 카카오인턴
- 코딩테스트
- 백준
- BFS
- 코테
- 부주상골수술
- dp
- SWIFT
- 독일어
- sql
- IOS
- 리눅스
- 롯데정보통신
- DFS
- 스택
- 구현
- istringstream
- ChatGPT
- 독학
- SQLD
- 부주상골수술후기
Archives
- Today
- Total
슈뢰딩거의 고등어
[프로그래머스] 베스트 앨범 (c++) 본문
https://programmers.co.kr/learn/courses/30/lessons/42579
[풀이방법]
장르별 총횟수를 저장할 map 을 정의합니다. map <string, int> m;
장르별로 노래횟수를 분류할 map 을 정의합니다. map <string, vector <pair<int, int>>> songs;
1. genres 를 하나씩 돌면서 위에서 정의한 자료구조에 저장합니다.
2. 장르 중, 플레이 합산이 높은 순으로 정렬합니다.
- map 의 경우 sort 함수를 사용하기 위해서는 vector 구조로 복붙해줘야 합니다.
3. 정렬된 장르들을 하나씩 확인합니다.
4. 장르의 노래를 플레이 횟수가 높은 순으로 분류합니다.
- 내부에 vector 로 정의했으므로 sort 함수를 바로 사용가능합니다.
5. 각 장르별 최대 노래 두 곡을 수록합니다.
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
//장르 : 총횟수
map <string, int> m;
// 장르 : [{번호, 횟수}...]
map <string, vector <pair<int, int>>> songs;
bool cmp(pair<string, int> a, pair<string, int> b) {
return a.second >= b.second;
}
//아이디 횟수
bool cmp1(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;
for(int i=0; i<genres.size(); i++) {
// 새로 등록
if(m.find(genres[i]) == m.end()) {
vector <pair<int, int>> v; v.clear();
v.push_back({i, plays[i]});
songs.insert(make_pair(genres[i], v));
m.insert(make_pair(genres[i], plays[i]));
}
else {
m[genres[i]] += plays[i];
songs[genres[i]].push_back({i, plays[i]});
}
}
vector<pair<string,int>> vec(m.begin(), m.end());
sort(vec.begin(), vec.end(), cmp);
for(int i=0; i<vec.size(); i++) {
string genre = vec[i].first;
// 아이디, 횟수
vector <pair<int, int>> song = songs[genre];
sort(song.begin(), song.end(), cmp1);
for(int j=0; j<2 && j<song.size(); j++)
answer.push_back(song[j].first);
}
return answer;
}
요즘 카카오코테 문제들만 풀다보니... 문제를 잘 못 풀어서 자신감이 떨어졌는데 이건 그래도 쉽게 맞춰서 좋았다 :)
같은 lv 3 라도 이렇게 차이가 나는걸 보면 확실히 카카오가 어렵긴한가보다
가끔은 쉬운 문제를 풀어서 자신감을 익히는 게 좋을 듯 하다!
'알고리즘' 카테고리의 다른 글
[2019 카카오 개발자 겨울 인턴십] 불량 사용자 (lv3) (0) | 2022.04.17 |
---|---|
[2019 카카오 개발자 겨울 인턴십] 튜플 (0) | 2022.04.17 |
[2020 카카오 인턴십] 경주로 건설 (1) | 2022.04.16 |
[2021 카카오 채용형 인턴십] 표 편집 (lv 3) (0) | 2022.04.07 |
[2021 카카오 채용연계형 인턴십] 거리두기 확인하기 (lv2) (0) | 2022.04.05 |
Comments