https://www.acmicpc.net/problem/13414
어려운 문제라기보다는 map을 사용하는데 익숙하지 않다보니, map을 이해하고 적응하는 과정인 것 같다.
알고리즘 방식
map 을 사용하여, key : 학번, value : 누른 순서 로 저장하였다.
위와 같이 저장함으로 써, 중복하여 누를 경우, 누른 순서가 최후의 순서로 갱신된다.
이후, map을 vector로 변환하여, 누른 순서를 기준으로 오름차순으로 정렬 후,
수강 가능 인원 수 만큼 출력
소스코드
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int K, L;
unordered_map<string, int> mp;
bool cmp(const pair<string, int>& a, const pair<string, int>& b) {
return a.second < b.second;
}
void input() {
cin >> K >> L;
string inp;
for (int i = 1; i <= L; i++) {
cin >> inp;
//mp.insert(make_pair(inp, i));
mp[inp] = i;
}
}
void solution() {
vector<pair<string, int>> v(mp.begin(), mp.end());
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < (K < v.size() ? K : v.size()); i++) {
cout << v[i].first << '\n';
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
input();
solution();
}
기억해야할 부분
map -> vector 및 custom sorting;
bool cmp(const pair<string, int> &a, const pair<string, int> &b){
return a.second < b.second;
}
map<string, int> mp;
vector<pair<string, int>> v(mp.begin(), mp.end());
sort(v.begin(), v.end(), cmp);
map에 대한 insert는 해당 key값에 대한 value가 존재할 경우 갱신되지 않는다.
mp.insert(make_pair(inp, i));
mp[inp] = i;
//insert의 경우 key: inp에 대한 value가 존재할 경우 해당 값이 i로 갱신되지 않지만,
//map[inp] = i 와 같은 방식의 경우 key: inp에 대한 value를 i로 갱신한다.
'알고리즘 > C++' 카테고리의 다른 글
[CLion, 백준] 알고리즘 문제 테스트 코드 (2) | 2024.10.09 |
---|---|
[백준] 1238 - 파티 by C++ (0) | 2023.08.17 |
[백준] 1261 - 알고스팟 by C++ (0) | 2023.03.24 |
[백준] 23564 - 재귀 문자열 by C++ (0) | 2023.01.27 |
[백준] 11265 - 끝나지 않는 파티 (0) | 2023.01.20 |
댓글