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