20920 c++ - 영단어 암기는 괴로워
2024. 11. 23. 20:10ㆍ🐣/BOJ
[C++] map / multimap / unordered_map / unordered_multimap
맵(map)맵은 키-값 쌍을 저장하고 키를 기반으로 데이터를 검색하는 데 사용됩니다. C++에서는 각 맵 타입의 동작 방식, 특징, 사용 목적에 따라 차이가 있습니다. 주요 map 타입들과 그 차이점을 정
chanhhh.tistory.com
map으로 접근해서 vector로 끝냈습니다.
기본적으로 c++의 map은 ordered와 unordered로 나뉩니다. 자동 정렬이 되는 맵이 있고, 해쉬 맵이 있습니다.
자주나오는 단어를 찾기 위해서 상수로 인덱싱이 가능한 unordered_map을 사용해서 카운트를 처리하였고, 정렬을 위해서 ordered한 map 을 고려해보다가가 multimap으로도 풀 수 있을거 같아서. vector로도 풀어보고, multimap으로도 풀어봤습니다.
vector 풀이
#include <algorithm>
#include <cstring>
#include <iostream>
#include <unordered_map>
#include <vector>
#define FASTIO ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
bool vcmp(string s1, string s2) {
int s1len = s1.size(), s2len = s2.size();
if (s1len == s2len) return s1 < s2;
return s1len > s2len;
}
int main() {
FASTIO;
int n, m, count = 0;
cin >> n >> m;
string s;
unordered_map<string, int> c;
for (int i = 0; i < n; i++) {
string t;
cin >> t;
if (t.size() >= m) {
c[t]++;
count = max(count, c[t]);
}
}
while (count--) {
vector<string> v;
for (auto cc : c) {
if (cc.second == count + 1) {
v.push_back(cc.first);
}
}
sort(v.begin(), v.end(), vcmp);
for (auto vv : v) {
s += vv + "\n";
}
}
cout << s;
return 0;
}
multimap 풀이
#include <iostream>
#include <map>
#include <unordered_map>
#define FASTIO ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
struct mcmp {
bool operator()(const pair<int, string> &a,
const pair<int, string> &b) const {
if (a.first == b.first) {
int avlen = a.second.size(), bvlen = b.second.size();
if (avlen == bvlen) {
return a.second < b.second;
}
return avlen > bvlen;
}
return a.first > b.first;
}
};
int main() {
FASTIO;
int n, m;
cin >> n >> m;
unordered_map<string, int> c;
for (int i = 0; i < n; i++) {
string t;
cin >> t;
if (t.size() >= m) {
c[t]++;
}
}
multimap<pair<int, string>, string, mcmp> freq_map;
for (const auto &pair : c) {
freq_map.insert({{pair.second, pair.first}, pair.first});
}
for (const auto &entry : freq_map) {
cout << entry.second << "\n";
}
return 0;
}
'🐣 > BOJ' 카테고리의 다른 글
21608 c++ - 상어 초등학교 (0) | 2024.11.26 |
---|---|
30049 c++ - 영업의 신 (0) | 2024.11.24 |
6987 c++ - 월드컵 (0) | 2024.11.20 |
10827 c++ - a^b (0) | 2024.11.17 |
9414 c++ - 프로그래밍 대회 전용 부지 (0) | 2024.11.16 |