๋ฐฑ์ค€/Python

[Python] ๋ฐฑ์ค€ 1920๋ฒˆ

๋‹ค๋ธ”๐Ÿ’ 2022. 5. 31. 01:04

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