PS/Baekjoon Online Judge

[백준 1181] 단어 정렬 [C]

kimyoungrok 2021. 7. 15. 10:31
728x90

백준 - 1181


풀이

문자열과 문자열의 길이를 구조체 배열로 저장해주고, Quick Sort를 사용해 길이에 따라 오름차순 정렬 후,

길이가 같을 때는 strcmp()로 문자열을 비교해 문자열이 크고 작은지에 따라 정렬해준다.

  • 문자열을 비교해 동일한 문자열을 가지는 구조체가 없을때만 출력해준다. 

소스코드

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
    char str[51];
    int len;
}Str;
int compare(const void *a, const void *b){
    Str s1 = *(Str*)a, s2 = *(Str*)b;
    if (s1.len < s2.len)
        return -1;
    else if (s1.len > s2.len)
        return 1;
    return strcmp(s1.str, s2.str);
}

int main(){
    int N, min = 0, max = 0;
    scanf("%d", &N);
    Str s[N];
    for (int i = 0; i < N; i++){
        scanf("%s", s[i].str);
        s[i].len = strlen(s[i].str);
    }
    qsort(s, N, sizeof(Str), compare);
    puts(s[0].str);
    for (int i = 1; i < N; i++)
        if (strcmp(s[i-1].str, s[i].str))
            puts(s[i].str);
}

출처

 

1181번: 단어 정렬

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

www.acmicpc.net

 

728x90