본문 바로가기
알고리즘 문제풀이/백준

[백준 1181] 단어 정렬

by m2162003 2020. 11. 28.

www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

map 소팅을 사용해봤다.

 

문제에서 모든 단어는 한번만 등장하게 조건을 걸어서 map을 사용하여 소팅을 진행했다.

 

맵을 소팅하는 방법은 맵을 벡터에 담아서 벡터를 소팅하는 것이다.

이 때 compare함수는 map의 자료형으로 소팅하면 된다.

#include <algorithm>
#include <iostream>
#include <map>
#include <vector>

#define pp pair<string, int>

using namespace std;

map<string, int> mp;

bool compare(const pp &a, const pp &b)
{
  if (a.second == b.second)
  {
    return a.first < b.first;
  }
  return a.second < b.second;
}
int main(void)
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

  int n;
  cin >> n;
  for (int i = 0; i < n; i++)
  {
    string tmp;
    cin >> tmp;
    if (mp.find(tmp) == mp.end())
    {
      mp[tmp] = tmp.length();
    }
  }

  vector<pp> v(mp.begin(), mp.end());
  sort(v.begin(), v.end(), compare);

  for (auto it : v)
  {
    cout << it.first << "\n";
  }
  return 0;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 1406] 에디터  (0) 2020.11.29
[백준 10814] 나이순 정렬  (0) 2020.11.28
[백준 7785] 회사에 있는 사람  (0) 2020.11.28
[백준 1253] 좋다  (0) 2020.11.27
[백준 2467] 용액  (0) 2020.11.27

댓글