#59. [백준_C언어] 10816 : 숫자 카드 2

 

 입력 코드 

#include <stdio.h>
#include <ctype.h>

enum {
    POSITIVE,
    NEGATIVE
};

int getInt(void);

int pos[10000001];
int neg[10000001];

int flag;

int main(void)
{
    int n, temp;

    scanf("%d ", &n);
    while (n--) {
        flag = POSITIVE;
        temp = getInt(), (flag == POSITIVE) ? pos[temp]++ : neg[temp]++;
    }
    scanf("%d ", &n);
    while (n--) {
        flag = POSITIVE;
        temp = getInt(), printf("%d ", (flag == POSITIVE) ? pos[temp] : neg[temp]);
    }

    return 0;
}

int getInt(void)
{
    int result, c;

    for (result = 0; ((c = getchar()) != EOF); ) {
        if (isdigit(c)) {
            result = (result * 10) + (c - '0');
        } else if (c == '-') {
            flag = NEGATIVE;
        } else {
            break;
        }
    }

    return result;
}

출처 www.acmicpc.net/source/20385882

 

 

 코드 설명 

#자료구조 #이분탐색 #해시를 사용한 집합과 맵

#include <stdio.h>

main() {
	int N, M;
	int arrN[500000], arrM[500000];
	int cntM[500000] = { 0, };
	scanf("%d", &N);

	int i, j;
	for (i = 0; i < N; i++) {
		scanf("%d", &arrN[i]);
	}

	scanf("%d", &M); 
	for (j = 0; j < M; j++) {
		scanf("%d", &arrM[j]);
	}

	for (j = 0; j < M; j++) {
		for (i = 0; i < N; i++) {
			if (arrM[j] == arrN[i])
				cntM[j]++;
		}
	}

	for (i = 0; i < M; i++) {
		printf("%d ", cntM[i]);
	}
}

시간초과

 

 

 문제 출처 

www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net