문제링크 :https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

 문제설명 

 

1. N개의 단어가 주어졌을 때 길이가 짧은것부터 출력

2. 길이가 같은 건 사전순으로 출력하고 똑같은 단어는 하나만 출력

 

 알고리즘 

 

1. 비교함수를 정의 해준다 

   - 길이 순으로 정렬 -> 사전순으로 정렬 -> 똑같은 단어는 하나만 출력.

 

 코드 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
 
 
bool compare_length(string str, string str2) {
    //길이가 짧은 순서가 우선
    if (str.length() < str2.length()) {
        return 1;
    }
    else if (str.length() > str2.length()) return 0;
    //길이가 같은경우 
    else return  str < str2;/// 사전 순으로 정렬
}
 
vector<string> v;
 
int main() {
    int n;
    cin >> n;
 
    for (int i = 0; i < n; i++) {
        string str;
        cin >> str;
        v.push_back(str);
    }
 
    sort(v.begin(), v.end(), compare_length);
 
    for (int i = 0; i < n; i++) {
        if (i < n - 1&&v[i] == v[i + 1] )continue;
        cout << v[i] << "\n";
    }
}
 
cs

'c++ > 백준' 카테고리의 다른 글

백준 4936번: 섬의 개수  (0) 2020.05.22
백준 6603번: 로또  (0) 2020.05.22
백준 3055번 : 탈출  (0) 2020.05.07
백준 1939번 : 중량 제한  (0) 2020.05.07
백준 2211번: 네트워크 복구  (0) 2020.05.07
ariz1623