Problem Solving/BOJ

[백준 / BOJ] C++ 1181 단어 정렬

nageune 2023. 2. 11. 18:18
728x90
반응형

1181번: 단어 정렬

 

문제

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

 

 

풀이

정렬 조건에 따라 정렬 후 출력하면 되는 문제다. 정렬 조건은 아래와 같다.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순

<algorithm> 헤더의 sort() 함수를 사용하면 쉽게 풀 수 있다. sort() 함수는 비교연산할 함수를 정할 수 있는데, 기본값은 오름차순이다. 따라서 compare함수를 만들어줬다. 길이가 같을 때는 사전 순으로, 이외엔 길이가 작은 순이 되도록 정렬해 주었다.

 

또 다른 문제의 조건은 중복된 값이 없어야 한다는 것인데 이는 erase함수와 unique함수를 함께 사용해 지워줘도 되지만 입력을 받을 때부터 vector에 입력받은 값이 없을 때만 추가해 줘서 해결했다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

bool compare(string a, string b) {
  if (a.length() == b.length())
    return a < b;
  return a.length() < b.length();
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  vector<string> v;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    if (find(v.begin(), v.end(), s) == v.end())
      v.push_back(s);
  }
  sort(v.begin(), v.end(), compare);
  for (string i : v)
    cout << i << '\n';
  return 0;
}

 

728x90
반응형