05-20 07:35
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

백준 1181 단어정렬 본문

카테고리 없음

백준 1181 단어정렬

벤치마킹 2019. 4. 29. 22:41


접근법.. 


우선 버블 소팅으로 단어 length 순서로 그리고 단어 비교로 쫙 정렬 해준다 


중복 제거는 그냥  index 를 앞뒤로 비교 하면 끝.. (이건 몰랐는데 ) 

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
 
int N;
 
struct Word{
    int  len;
    char word[51];
 
};
 
 
Word arr[20001];
int input[20001= { 0, };
 
int j_strcmp(const char *src, const char * dst) {
 
    while (*src != 0 && *src == *dst) {
        *src++*dst++;
    }
    return *src - *dst;
}
 
 
int str_len(const char str[]){
 
    int len = 0;
    while (str[len++!= 0){
 
    }
 
    return len - 1;
}
 
int WordCmp(Word a, Word b){
 
    if (a.len != b.len)
        return a.len < b.len ? 1 : -1;
 
    int ret = j_strcmp(a.word, b.word);
 
    if (ret < 0)
        return 1//음수면 a가 순위 높음  //
    else if (ret > 0)
        return -1;
    else
        return 0;
 
}
Word temp[100000];
 
void MergeSort(Word  arr[], int l, int r)
{
 
    int li = l; //시작점 
 
    int half = (l + r) / 2;
    int ri = half +1// half +1 부터 시작 
 
 
    int idx = l;
 
    if (l == r)
        return;
 
    MergeSort (arr, (l + r) / 2 + 1, r);
    MergeSort(arr, l, (l + r) / 2);
 
    while (li <= half && ri <= r){
 
        if (WordCmp(arr[li], arr[ri]) >= 0)  temp[idx++= arr[li++];
        else temp[idx++= arr[ri++];
 
    }
 
    while (li <= half) temp[idx++= arr[li++];
    while (ri <= r) temp[idx++= arr[ri++];
 
    //idx 는 l 부터 시작했으니 .결국 시작 포인트는 같게 된다. 
     
    for (int i = l; i <= r; i++) {
 
        arr[i] = temp[i];
    }
 
}
 
 
int main(void){
 
    freopen("input.txt""r", stdin); setbuf(stdout, NULL);
 
    int N;
    cin >> N;
 
    for (int i = 0; i < N; i++){
 
        cin >> arr[i].word;
        arr[i].len = str_len(arr[i].word);
        input[i] = i;
 
    }
 
    MergeSort(arr, 0, N - 1);
 
     for (int i = 0; i < N; i++)
    {
        if (i == 0)
            cout << arr[i].word << "\n";
        else 
        if (j_strcmp(arr[i].word, arr[i - 1].word) == 0)
            continue;
        else 
            cout << arr[i].word << "\n";
 
    
    }
 
    return 0;
}
cs


Comments