https://www.acmicpc.net/problem/20920
제출코드
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
bool comp(pair<string, int> &a, pair<string, int> &b)
{
if (a.second == b.second)
{
if (a.first.length() == b.first.length())
return a.first < b.first;
return a.first.length() > b.first.length();
}
return a.second > b.second;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
map<string, int> words;
int n, m;
string str;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> str;
if (str.length() >= m)
words[str]++;
}
vector<pair<string, int>> v(words.begin(), words.end());
sort(v.begin(), v.end(), comp);
for (auto w : v)
{
cout << w.first << '\n';
}
}
처음에는 sort 함수에 대해 잘 몰라서 sort를 반복해서 사용해줘야 한다고 생각해 삽질을 좀 했는데, 그냥 애초에 조건에 다 맞게 정렬시키도록 함수를 구현하면 되는 거였다
map에서 key값이 아니라(map에서는 기본적으로 key값을 기준으로 정렬시켜주기 때문에) value를 기준으로 정렬시키고 싶었는데, 그러기 위해서는 map 자체에서는 정렬시킬 수가 없고 새롭게 vector를 하나 만들어줘서 pair 형태로 넣고 vector를 정렬시키는 방식으로 구현해야 한다
추가적으로, comp 함수의 코드에서 참조형태가 아니라 그냥 인자를 전달하게 되면 해당 부분을 복사해서 사용하는 것이기 때문에(메모리 낭비가 발생) 참조 형태로 전달하고 있다
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 1213] 팰린드롬 만들기 (0) | 2025.01.02 |
---|---|
[C++][백준 1515] 수 이어쓰기 (0) | 2025.01.01 |
[C++][백준 1764] 듣보잡 (0) | 2025.01.01 |
[C++] 입출력 속도 줄이기(시간초과 해결법) (1) | 2025.01.01 |
[C++][백준 4659] 비밀번호 발음하기 (0) | 2024.12.31 |