[백준 1764] 듣보잡

2024. 3. 17. 00:07코딩테스트/백준

문제

https://www.acmicpc.net/problem/1764

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Person{
	char name[21];
}Person;
int compare(const void* a, const void* b)
{
	int len = (strlen(((Person*)a)->name) < ((Person*)b)->name) ? strlen(((Person*)a)->name) : strlen(((Person*)b)->name);

	for (int i = 0; i < len; i++) { // 숫자 한자리씩 비교
		int nameA = ((Person*)a)->name[i];
		int nameB = ((Person*)b)->name[i];

		if (nameA < nameB)
			return -1;
		else if(nameA > nameB)
			return 1;
	}

	return -1; // 이게 1이면 틀림.

}
int main(void)
{
	int n, m, sum = 0, bdd = 0; // bdd = db용(사실 필요없을것같기도함 sum땜에)

	scanf("%d %d", &n, &m);
	Person* d = (Person*)malloc(sizeof(Person) * (n+m)); //하나에 입력 전부받기
	Person* db = (Person*)malloc(sizeof(Person) * n); // 중복된애들 저장

	for (int i = 0; i < n + m; i++) //하나에 입력 전부받기
		scanf("%s", d[i].name);

	qsort(d, n+m, sizeof(Person), compare); // 정렬

	for (int i = 0; i < n+m; i++) {
		if (strcmp(d[i].name, d[i + 1].name) == 0 && i < n + m - 1) { //똑같으면 bd에 넣기
			sum++;
			strcpy(db[bdd].name, d[i].name);
			bdd++;
		}
	}

	printf("%d\n", sum);


	for (int i = 0; i < bdd; i++)
		printf("%s\n", db[i].name);

	return 0;
}

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 - 10816] 숫자 카드 2  (1) 2024.09.02
[백준 1003] 피보나치 함수 C언어  (0) 2024.03.12
[백준 10773] 제로  (0) 2024.03.08
[백준 2108] 통계학  (1) 2024.02.08
[백준 7568] 덩치  (0) 2024.02.07