1764: 듣보잡

2022. 9. 24. 18:03C언어/백준

자료구조

실버 4

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

 

1764번: 듣보잡

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

www.acmicpc.net

 

-결과

 

-코드

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int comp(const void*a, const void*b);

struct who {
    char name[21];
};
struct same {
    char who[21];
};
struct who name[1000001];
struct same who[500001];

int main(){
    int n, m, i, j, c = 0;
    scanf("%d %d", &n, &m);
    for (i=0;i<n+m;i++) {
        scanf("%s", name[i].name);
    }
    qsort(name, n+m, sizeof(name[0]),comp);
    for (i=0;i<n+m;i++) {
        if (strcmp(name[i].name, name[i+1].name) == 0) {
            strcpy(who[c].who,name[i].name);
            i++;
            c++;
        }
    }
    printf("%d\n", c);
    for (i=0;i<c;i++) {
        printf("%s\n", who[i].who);
    }
}

int comp (const void*a, const void*b) {
    return (strcmp((char*)a, (char*)b));
}

 

-풀이

겹치는 인원을 세고, 그 사람들의 이름을 출력해야 한다.

그렇기 때문에 구초체를 이용하여 베열에 이름을 정렬한다.

만약 입력받은 이름이 같다면 변수 c를 증가하여 저장한다.

그리고 i++를 하여 다음 배열로 넘어가도록 작성한다. 

마지막으로 변수 c와 저장된 이름을 출력하도록 한다.

'C언어 > 백준' 카테고리의 다른 글

11652: 카드  (0) 2022.09.29
2675: 문자열 반복  (0) 2022.09.24
18258: 큐 2  (0) 2022.09.24
3052: 나머지  (0) 2022.09.24
1158: 요세푸스 문제  (0) 2022.09.24