Baekjoon

[#1181] 단어 정렬

강람이 2020. 3. 9. 19:04
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <string>
 
using namespace std;
 
int main() {
    int n;
    cin >> n;
    vector<pair<intstring>> vec(n);
 
    for (int i = 0; i < n; i++) {
        string str;
        cin >> str;
        vec[i] = make_pair(str.length(), str);
    }
 
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
 
    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i].second << "\n";
        //printf("%s\n", vec[i].second);
    }
 
    return 0;
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

vec.erase(iter) : 인자가 한개면 iter위치의 값 삭제

vec.erase(start, end) : 인자가 두개면 [strat, end) 범위의 값 삭제

 

unique(start, end): [start, end) 중복 되는 값을 하나 남기고 뒤로 보냄. 뒤로 보낸거의 시작 iter 반납

unique 쓰기 전에 반드시 정렬되어 있어야함

 

예를 들어 {1, 1, 2, 3, 5, 5} 에 unique를 하면 {1, 2, 3, 5, 1, 5} 가 되고 두번째 1의 주소 반환

 

따라서 vector에서 중복 제거할때는

sort(vec.begin(), vec.end());

vec.erase(unique(vec.begin(), vec.end()), vec.end());