[백준] 10816번 숫자 카드 2 / C++

#문제

백준 10816번 숫자 카드 2

#풀이

#include <iostream>
#include <cstdlib>

using namespace std;

int cards[20000000] = { 0 };

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, m;
	cin >> n;

	for (int i = 0; i < n; ++i)
	{
		int x;
		cin >> x;

		if (x < 0)
		{
			cards[abs(x) + 10000000] += 1;
		}
		else
		{
			cards[x] += 1;
		}
	}

	cin >> m;

	for (int i = 0; i < m; ++i)
	{
		int x;
		cin >> x;

		if (x < 0)
		{
			cout << cards[abs(x) + 10000000] << " ";
		}
		else
		{
			cout << cards[x] << " ";
		}
	}

	return 0;
}

#정리

처음 입력에서 n개의 숫자를 입력 받는다. 그리고 두 번째 입력에서 m개의 숫자를 입력 받는데, 각 숫자가 첫 입력에서 몇 번을 입력 받았는지 출력하는 문제. hash map을 이용하여 빠르게 입력 받고 count를 사용하여 출력하고자 했으나, 시간초과. 원초적 방법인 배열을 사용하여 해결했다. 이슈는 -10,000,000까지 숫자를 입력받을 수 있기 때문에, 음수를 입력받은 경우 사용할 수 있도록 10,000,000개의 배열을 추가로 받아 사용했다. 처음 입력에서 각 배열에 숫자를 더하고, 출력하여 간단하게 해결했다.




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • [백준] 9613번 GCD 합 / C++
  • [백준] 1244번 스위치 켜고 끄기 / C++
  • [백준] 10773번 제로 / C++
  • [백준] 2563번 색종이 / C++
  • [백준] 10866번 덱 / C++