[백준 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 |