N 36 21 22
E 127 23 46
Archive vol. 01
Depth0000mSURFACE
Research Note / Development

회사에 있는 사람<7788>

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

char names[1000001][6];

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

int main() {
    int n;
    
    if (scanf("%d", &n) != 1) return 0;
    
    for (int i = 0; i < n; i++) {
        scanf("%s %*s", names[i]);
    }

    qsort(names, n, sizeof(names[0]), compare);

    for (int i = 0; i < n; ) {
        if (i < n - 1 && strcmp(names[i], names[i+1]) == 0) {
            i += 2; 
        } 
        else {
            printf("%s\n", names[i]);
            i++; 
        }
    }

    return 0;
}

C언어로 문제를 풀면서 최대한 간단하게 생각을 해보려고 했다. 처음에는 자료구조를 활용하면서 이름과 그런 것들을 다 저장하면서 해야하나? 싶기는 했지만, 어짜피 같은 이름이 2번 언급된거면 해당 인물은 무조건 나갔다. 라고 가정을 하고 문제를 풀었다.

그래서 해당 문제에서는 그냥 qsort를 해버리고, sort를 해버린 순간 어짜피 같은 문자끼리는 묶이니까 같은 이름이 있냐 없냐로 문제를 풀 수 있도록 코드를 작성하였다!