Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 7795๋ฒˆ - ๋จน์„ ๊ฒƒ์ธ๊ฐ€ ๋จนํž ๊ฒƒ์ธ๊ฐ€ (C++)

moaoh 2023. 7. 7. 23:57

๋ฌธ์ œ

์‹ฌํ•ด์—๋Š” ๋‘ ์ข…๋ฅ˜์˜ ์ƒ๋ช…์ฒด A์™€ B๊ฐ€ ์กด์žฌํ•œ๋‹ค. A๋Š” B๋ฅผ ๋จน๋Š”๋‹ค. A๋Š” ์ž๊ธฐ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋จน์ด๋งŒ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, A์˜ ํฌ๊ธฐ๊ฐ€ {8, 1, 7, 3, 1}์ด๊ณ , B์˜ ํฌ๊ธฐ๊ฐ€ {3, 6, 1}์ธ ๊ฒฝ์šฐ์— A๊ฐ€ B๋ฅผ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์Œ์˜ ๊ฐœ์ˆ˜๋Š” 7๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 8-3, 8-6, 8-1, 7-3, 7-6, 7-1, 3-1.

๋‘ ์ƒ๋ช…์ฒด A์™€ B์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, A์˜ ํฌ๊ธฐ๊ฐ€ B๋ณด๋‹ค ํฐ ์Œ์ด ๋ช‡ ๊ฐœ๋‚˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” A์˜ ์ˆ˜ N๊ณผ B์˜ ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A์˜ ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘ ์ฃผ์–ด์ง€๋ฉฐ, ์…‹์งธ ์ค„์—๋Š” B์˜ ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘ ์ฃผ์–ด์ง„๋‹ค. ํฌ๊ธฐ๋Š” ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. (1 โ‰ค N, M โ‰ค 20,000) 


์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, A๊ฐ€ B๋ณด๋‹ค ํฐ ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

2
5 3
8 1 7 3 1
3 6 1
3 4
2 13 7
103 11 290 215

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

7
1

ํ’€์ด๊ณผ์ •

 

[C++ Algorithm] ์ด๋ถ„ ํƒ์ƒ‰(Binary Search)

โญ๏ธ ์ด๋ถ„ ํƒ์ƒ‰(Binary search)์ด๋ž€? - ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด)์—์„œ ์›ํ•˜๋Š” ๊ฐ’(target)์˜ ์กด์žฌ ์—ฌ๋ถ€(์กด์žฌ ์œ„์น˜)๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜. - ๋ฐ˜๋“œ์‹œ ๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด)๋ฅผ ์ •๋ ฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. - ํƒ์ƒ‰ํ• 

m42-orion.tistory.com

์ด๋ถ„ํƒ์ƒ‰์ด๋ผ๋Š” ๊ฐœ๋…์ž์ฒด๋ฅผ ์ ‘ํ•ด๋ณธ์ ์ด ์—†์–ด์„œ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š”๋ฐ ์˜ค๋žœ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์œ„์— ์žˆ๋Š” ๋งํฌ๋ถ„์˜ ๊ธ€์„ ์ฐธ์กฐํ•ด์„œ ์ด๋ถ„ํƒ์ƒ‰์ด ๋ญ”์ง€ ๊ฐœ๋…์„ ์žก์•˜๊ณ  ๋ฐฑ์ค€์— ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ์–ด๋–ป๊ฒŒ ์‘์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผํ•˜๋Š”์ง€ ์ƒ๊ฐ์„ ํ•˜๋ฉฐ ํ’€๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

code

#include <iostream>
#include <algorithm>
#include <vector>

int		binary_search(std::vector <int>& n, int temp)
{
	int low, high, mid, num;

	num = 0;
	low = 0;
	high = n.size() - 1;
	while (low <= high)
	{
		mid = (low + high) / 2;
		if (temp < n[mid])
			high = mid - 1;
		else if (temp >= n[mid])
			low = mid + 1;
	}
	num = n.size() - low;
	return num;
}

int		main(void)
{
	int t, a, b, temp, count;
	std::vector <int> n;

	std::cin >> t;
	for(int i = 0; i < t; i++) {
		std::cin >> a >> b;
		for(int j = 0; j < a; j++) {
			std::cin >> temp;
			n.push_back(temp);
		}
		std::sort(n.begin(), n.end());
		count = 0;
		for(int j = 0; j < b; j++) {
			std::cin >> temp;
			count += binary_search(n, temp);
		}
		n.clear();
		std::cout << count << "\n";
	}

	return (0);
}


ํ›„๊ธฐ

๊ทธ๋ ‡๊ฒŒ ์˜ค๋žœ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜์ง€์•Š์•˜์–ด๋„ ๋ ๋งŒํ•œ ๋ฌธ์ œ์ธ๊ฑฐ๊ฐ™์€๋ฐ

์ดํ•ดํ•˜๋Š”์‹œ๊ฐ„๊ณผ ์–ด๋–ป๊ฒŒ ์‘์šฉ์„ ํ•ด์•ผํ•˜๋Š”์ง€ ๊ฐœ๋…์žก๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํž˜๋“ค์—ˆ์–ด์„œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค๋ฒ„๋ ธ๋‹ค...