홍시홍의 프로그래밍

[백준 10815] 숫자 카드 본문

알고리즘 문제풀이/백준

[백준 10815] 숫자 카드

홍시홍 2020. 1. 9. 00:16

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

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이가 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이

www.acmicpc.net

 

요구사항

1. 목록에서 주어진 수 찾기

 

풀이

1. 목록 정렬

2. 이분 탐색으로 찾기

다른 풀이

1. 해시

 

이분 탐색 풀이

#include <iostream>
#include <algorithm>
using namespace std;

typedef long long ll;

ll n, m;
ll map[500001];
ll buf[500001];
ll tans = 0;
ll maxv = 0;
ll minv = 0;
bool check(ll k) {
	ll ans = 0;
	for (int i = 0; i < n; i++) {
		if (map[i] - k > 0) {
			ans += (map[i] - k);
		}
		if (ans >= m)
			return true;
	}
	if (ans >= m)
	{
		return true;
	}
	else {
		return false;
	}
}
bool com(ll a, ll b)
{
	return (a < b);
}
int Find(ll k) {
	ll left = 0;
	ll right = n;
	ll mid = 0;
	//cout << "M" << maxv << " minv" << minv << endl;
	while (left <= right) {
		mid = (left + right) / 2;
		if (map[mid]==k)
			return 1;
		if (k > map[mid]) {
			left = mid + 1;
		}
		else {
			right = mid - 1;
		}
	}
	return 0;
}

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		scanf("%lld", &map[i]);
	}
	sort(map, map +( n));
	cin >> m;
	for (int i = 0; i < m; i++) {
		scanf("%lld", &buf[i]);
		printf("%d ", Find(buf[i]));
	}




}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 9938] 방 청소  (0) 2020.01.09
[백준 10775] 공항  (0) 2020.01.09
[백준 2805] 나무 자르기  (0) 2020.01.08
[백준 1920] 수 찾기 (해시, 정렬)  (2) 2020.01.08
[백준 1976] 여행 가자  (0) 2020.01.02
Comments