1181번
2023. 2. 6. 18:33ㆍ백준(c , c++)
728x90
#define _CRT_SECURE_NO_WARNINGS //경고 제거
#include <stdio.h>
#include<stdlib.h> //qsort 함수 사용
#include<string.h> /*strlen(문자열의 길이 반환 함수),strcmp(문자열 비교 함수: 같다면 0반환,
다르다면 -앞에 문자열이 사전 상 뒤에 있다면 양수 반환,
뒤에 문자열이 사전 상 뒤에 있다면 음수 반환*/
int compare(const void* arg1, const void* arg2) { //오름차순으로 정렬위한 비교 함수 만들기
if (strlen((const char*)arg1) < strlen((const char*)arg2))
//두번째 인자가 더 크다면 음수 반환
return -1;
else if (strlen((const char*)arg1) > strlen((const char*)arg2))
//첫번째 인자가 더 크다면 양수 반환
return 1;
else return strcmp((char*)arg1, (char*)arg2); /*두문자열의 길이가 같다면 문자열을 사전순으로 정렬을 위해 strcmp 함수로 비교
->strcmp 함수 결과로 음수가 나오면 두번째 인자가 더 큰것으로 간주,
양수가 나오면 첫번째 인자가 더 큰 것으로 간주,
0이 나오면 두 문자열은 같은 것으로 간주*/
}
typedef struct word {
char alph[51];
};
int main() {
int N;
scanf("%d", &N);
word* input = new word[N];
for (int i = 0; i < N; i++) {
scanf("%s", input[i].alph);
}
qsort(input, N, sizeof(input[0]), compare);
/*첫번째 인자 : 배열을 가리키는 포인터
두번째 인자 : 배열의 크기
세번째 인자 : 배열의 원소 1개의 크기
네번째 인자 : 구현한 비교함수 가리키는 포인터
void qsort(void *base, size_t number, size_t width, int(*compare)(const void*, const void*) */
for (int i = 0; i < N-1; i++) {
if (strcmp(input[i].alph, input[i + 1].alph) != 0) {
//중복된 단어는 출력하지 않기 위한 조건문
printf("%s\n", input[i].alph);
}
}
printf("%s\n", input[N - 1].alph);
return 0;
}728x90
'백준(c , c++)' 카테고리의 다른 글
| 좌표 압축 기법- 18870번 (0) | 2023.02.07 |
|---|---|
| 10814번 (0) | 2023.02.06 |
| 2차원 배열을 정렬할 때 구조체 사용하기 (1) | 2023.01.25 |
| 계수 정렬(counting sort) (0) | 2023.01.13 |
| 퀵 정렬(quick sort) (1) | 2023.01.13 |