1920๋ฒ. ์ ์ฐพ๊ธฐ (silver 4)
N๊ฐ์ ์ ์ A[1], A[2], …, A[N]์ด ์ฃผ์ด์ ธ ์์ ๋, ์ด ์์ X๋ผ๋ ์ ์๊ฐ ์กด์ฌํ๋์ง ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ N๊ฐ์ ์ ์ A[1], A[2], …, A[N]์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ M๊ฐ์ ์๋ค์ด ์ฃผ์ด์ง๋๋ฐ, ์ด ์๋ค์ด A์์ ์กด์ฌํ๋์ง ์์๋ด๋ฉด ๋๋ค. ๋ชจ๋ ์ ์์ ๋ฒ์๋ -2^31 ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ 2^31๋ณด๋ค ์๋ค.
์ถ๋ ฅ
M๊ฐ์ ์ค์ ๋ต์ ์ถ๋ ฅํ๋ค. ์กด์ฌํ๋ฉด 1์, ์กด์ฌํ์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.

์ด ๋ฌธ์ ๋ ์ด์ง ํ์์ ์ด์ฉํ๋ฉด ๋นจ๋ฆฌ ๋ต์ ๊ตฌํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์กด์ฌํ๋์ง ์์๋ด๊ณ ์ถ์ m๊ฐ์ ์๋ฅผ key๋ก ๋๊ณ key๊ฐ์ ์ฐพ์ผ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
binary_search๋ผ๋ ํจ์๋ฅผ ์ ์ํด์ ์ด๋ฅผ ์ฌ์ฉํด์ฃผ์๋ค.
ํจ์์ ์ธ์๋ก ๋ฐฐ์ด, Key๊ฐ, ์์๊ฐ์ ํด๋นํ๋ start, ๋ ๊ฐ์ ํด๋นํ๋ end๋ฅผ ๋ฐ์์ฃผ์๊ณ ,
first๊ฐ end๋ณด๋ค ํฌ๋ฉด false๋ฅผ ๋ฐํํด์ ํ์ for๋ฌธ์์ 0์ด ๋ฐํ๋๊ฒ ํด์ฃผ์๊ณ ,
๊ทธ ์ธ์ ๊ฒฝ์ฐ mid๊ฐ์ (start+end)//2๋ฅผ ์ ์ฅํ๊ณ num[mid]๊ฐ๊ณผ key๊ฐ์ ๋น๊ตํด์ ๊ฐ๋ค๋ฉด True๋ฅผ ๋ฐํํด์ ํ์ for๋ฌธ์์ 1์ด ์ถ๋ ฅ๋๋๋ก ํด์ฃผ์๋ค.
num[mid]์ ๊ฐ์ด key๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด binary_search๋ฅผ ์ฌ๊ทํธ์ถ ํด์ฃผ์ด์ ๋ค์ ์ํ๋๊ฒ ํด์ฃผ์๋๋ฐ, ์ด๋ end์ ๊ฐ์ mid-1๋ก ๋ฐ๊ฟ์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ num[mid] ๊ฐ์ด key๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ ์ฌ๊ทํธ์ถ์ ํ ๋ start์ ๊ฐ์ mid+1๋ก ์ค์ ํด์ฃผ์๋ค.
m๊ฐ์ ์๋ค์ด ๋ด๊ธด m_list์ ์์๋ฅผ for๋ฌธ์ ๋๋ ค์ 1๋๋ 0์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
# ์ด์ง ํ์
def binary_search(num, key, start, end):
if start > end:
return False
mid = (start + end) // 2 # ์ค๊ฐ ๊ฐ
if num[mid] == key:
return True
elif num[mid] > key:
return binary_search(num, key, start, mid-1)
else:
return binary_search(num, key, mid+1, end)
num = int(input())
n_list = list(map(int, input().split()))
m = int(input())
m_list = list(map(int, input().split()))
n_list = sorted(n_list)
for m in m_list:
if binary_search(n_list, m, 0, num-1):
print(1)
else:
print(0)

'๋ฐฑ์ค > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Python] ๋ฐฑ์ค 1764๋ฒ (0) | 2022.06.22 |
|---|---|
| [Python] ๋ฐฑ์ค 11650๋ฒ (0) | 2022.05.31 |
| [Python] ๋ฐฑ์ค 1654๋ฒ (0) | 2022.05.31 |
| [Python] ๋ฐฑ์ค 11651๋ฒ (0) | 2022.05.25 |
| [Python] ๋ฐฑ์ค 2805๋ฒ (0) | 2022.05.24 |