๋ชฉ์ฐจ
๐ซก Overview
์ฒด๊ฐ ๋์ด๋: โ โโโโ
์์์๊ฐ:
๋ฌธ์ ๋ ๋ฒจ: ์ค๋ฒ4 / ๋ฌธ์ ์ ํ: ์ด๋ถํ์
ํ์ด ์ํ: ์ค์ค๋ก ํด๊ฒฐ
์ถํ: ์๋ฒฝ ์ดํด
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2776
์๊ตฌ์ฌํญ ๋ถ์
๋๋ณด๊ธฐ
"""
๋ฌธ์ : ์์ฒฉ2์ ์๋ ๋ชจ๋ ์ ๋ค์ด ์์ฒฉ 1์ ์๋์ง ์ฐพ๊ธฐ
output: ์์ผ๋ฉด 1, ์์ผ๋ฉด 0
## ์๊ณ ๋ฆฌ์ฆ
์์ ํ์
- ์์ฒฉ 2์ ์๋ ๋ชจ๋ ์๋ค์ ๋ํด์, ์์ฒฉ 1์ ์ซ์๋ค๊ณผ ์ซ์ฐจ ๋น๋ฃ
- O(M*N) = O(1,000,000* 1,000,000) => ์๊ฐ ์ด๊ณผ
์ด๋ถ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ ์
- ์์ฒฉ 1์ ์๋ ์ซ์ ์ ๋ ฌ O(NlogN)
- ์์ฒฉ 1์ ๋ฐ์ดํฐ ์
์์ ์์ฒฉ 1์ 1๊ฐ์ ์ซ์๋ฅผ ์ฐพ๊ธฐ: O(logN)
- ์์ฒฉ 2์ ๋ชจ๋ ์ซ์๋ฅผ ์ฐพ๊ธฐ : O(M*logN) = 10**6 x 6*log10
- 18,000,000 => ์ฝ 2์ฒ๋ง ์ฐ์ฐ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
"""
๋์ ์ฝ๋
๋๋ณด๊ธฐ
T = int(input()) # ํ
์คํธ ์ผ์ด์ค ๊ฐ์
for _ in range(T):
N = int(input()) # ์ ์์ ๊ฐ์ 1 <= N <= 1,000,000
N_lst = list(map(int, input().split()))
M = int(input()) # ์์ฒฉ 2์ ์ ์ ๊ฐ์: 1 <= N <= 1,000,000
M_lst = list(map(int, input().split()))
def binary_search(target, N_lst):
left, right = 0,len(N_lst)-1
while left<=right:
mid = (left+right)//2
#print('left mid right :', left, mid, right)
if N_lst[mid] == target:
#print("ํ๊ฒ์ ์ฐพ์")
return 1
elif N_lst[mid] < target:
#print("target์ด mid ๋ณด๋ค ์ค๋ฅธ์ชฝ ์์ญ์ ์์, left๋ ")
left = mid + 1
else:
#print("target์ด mid ์ผ์ชฝ ์์ญ์ ์์ ")
right = mid - 1
return 0
# ๋ฆฌ์คํธ ์ ๋ ฌ
N_lst.sort()
# ์์ ์ฐพ๊ธฐ
result = []
for m in M_lst:
result.append(binary_search(m, N_lst)) # ์์ผ๋ฉด True, ์๋๋ฉด false
print('\n'.join(map(str, result)))
#๋ฐฑ์ค #์ฝ๋ฉํ ์คํธ #์๊ณ ๋ฆฌ์ฆ #python #ํ์ด์ฌ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Goorm][Python] ํ๋๋ชจ๋น์ค ์ ์ฌ ํ๋ก์ ํธ (0) | 2024.09.02 |
---|---|
โ [์นด์นด์ค๊ธฐ์ถ][Python] ํคํจ๋ ๋๋ฅด๊ธฐ (0) | 2024.08.01 |
[BoJ][Python] 2468 ์์ ์์ญ (0) | 2024.07.31 |
[์ด๋ก ] DFS- (2) ์ฌ๊ท๋ก ๊ตฌํํ๊ธฐ (0) | 2024.07.31 |
[์ด๋ก ] DFS- (1) ์คํ์ผ๋ก ๊ตฌํํ๊ธฐ (0) | 2024.07.31 |