본문 바로가기

알고리즘/백준

1181. 단어 정렬

반응형





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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
using namespace std;
 
bool compare(string a, string b) {
    return a.length() == b.length() ? a < b : a.length() < b.length();
}
 
int main() {
    int t;
    scanf("%d"&t);
    vector<string> v;
    
    for(int i = 0; i < t; i++) {
        string s;
        cin >> s;
        bool isDup = false;
        for(int j = 0; j < v.size(); j++) {
            if(v[j].compare(s) == 0) { isDup = truebreak; }
        }
        if(isDup) continue;
        else v.push_back(s);
    }
    
    sort(v.begin(), v.end(), compare);
    int size = v.size();
    for(int i = 0; i < size; i++)
        cout << v[i] << '\n';
    
    return 0;
}
cs


최근에 문제를 풀면서 다른 사람 풀이를 보다가 정말 괜찮은 방법을 발견했다. 그 방법이 compare함수를 만들어서 내가 원하는대로 정렬하는 방법이다.


먼저 문제는 이해가 쉽다. 길이가 짧은 것을 먼저 출력되게하고 길이가 같다면 그 안에서 사전내로 정렬하여 출력하는 것이다.

그러기 위해서 작성해준것이 compare함수이다. 두 string값을 인자로 받고 그 두 수의 길이를 비교해서 같다면 사전 순대로 정렬하고 아니면 길이별로 정렬을 해주도록 도와주는 함수이다. 이렇게 하고 vector를 정렬할때 처럼 sort함수를 사용하는데 마지막에 compare함수만 넣어주면 된다. 


여기서 주의할 점이 문제를 보면 문자가 같은 것이 입력되었을때는 하나만 출력이 되어야한다. 그러기위해서 아예 입력을 받을 때부터 이미 그 문자가 vector에 들어있는지 확인한다음 입력을 해준다.


'알고리즘 > 백준' 카테고리의 다른 글

7576. 토마토  (0) 2018.11.15
1259. 팰린드롬수  (0) 2018.11.13
2751번 수 정렬하기2  (0) 2018.10.11
2750번 수 정렬하기  (0) 2018.10.11
6064번 카잉 달력  (0) 2018.10.11