티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 10816번 숫자 카드 2

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

숫자 카드 N개를 가지고 있는 상황에서
해당하는 각 숫자의 카드가 몇 개 있는지를 출력

 

2. 풀이

문제의 메모리 제한이 256MB로 넉넉하기 때문에

2천만 개의 int 배열을 선언하여 단순한 코드로 풀었습니다.

 

Hash 구조를 응용하면 메모리를 상당히 많이 아낄 수 있지만

숫자 카드 1 문제에서 풀어봤기 때문에 굳이 구현하지 않았습니다.

관련 내용은 아래 링크 참고하시면 됩니다.

 

https://rightbellboy.tistory.com/253

 

[백준/BOJ] 10815번 숫자 카드 (C/C++)

백준 온라인 저지(BOJ) 10815번 숫자 카드 https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에

rightbellboy.tistory.com

(숫자 카드 2 문제에서는 struct 로 구현한 뒤 카드의 개수도 저장해야 합니다)

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
10816_숫자 카드2
79236KB	404ms
*/
#include <cstdio>

const int BASE = 10000000;
const int LM = BASE * 2 + 1;
int a[LM], N, M, n;

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	scanf("%d", &N);
	for (int i = 0; i < N; ++i) {
		scanf("%d", &n);
		++a[n + BASE];
	}

	scanf("%d", &M);
	for (int i = 0; i < M; ++i) {
		scanf("%d", &n);
		printf("%d ", a[n + BASE]);
	}
	return 0;
}

 

728x90
반응형
댓글