이뢄 검색

πŸ“„ 문제

μž„μ˜μ˜ N개의 μˆ«μžκ°€ μž…λ ₯으둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.
N개의 수λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ λ‹€μŒ
N개의 수 쀑 ν•œ 개의 수인 M이 주어지면
μ΄λΆ„κ²€μƒ‰μœΌλ‘œ M이 μ •λ ¬λœ μƒνƒœμ—μ„œ λͺ‡ λ²ˆμ§Έμ— μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.
단 쀑볡값은 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

β–£ μž…λ ₯μ„€λͺ…
첫 쀄에 ν•œ 쀄에 μžμ—°μˆ˜ N(3<=N<=1,000,000)κ³Ό M이 μ£Όμ–΄μ§‘λ‹ˆλ‹€.
두 번째 쀄에 N개의 μˆ˜κ°€ 곡백을 사이에 두고 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

β–£ 좜λ ₯μ„€λͺ…
첫 쀄에 μ •λ ¬ ν›„ M의 κ°’μ˜ μœ„μΉ˜ 번호λ₯Ό 좜λ ₯ν•œλ‹€.

β–£ μž…λ ₯예제
8 32
23 87 65 12 57 32 99 81

β–£ 좜λ ₯예제
3

🧞 풀이

더보기

풀이

# μž…λ ₯: 첫 쀄에 μžμ—°μˆ˜ n, m, 두 번째 쀄에 n개의 μˆ˜κ°€ 곡백을 사이에 두고 주어짐
# 좜λ ₯: 첫 쀄에 μ •λ ¬ ν›„ m의 κ°’μ˜ μœ„μΉ˜ 번호λ₯Ό 좜λ ₯

n, m = map(int, input().split())                                    # n, m μž…λ ₯ 및 ν• λ‹Ή
n_list = list(map(int, input().split()))                            # 숫자 리슀트 μž…λ ₯ 및 ν• λ‹Ή

n_list = sorted(n_list)                                             # n_list μ˜€λ¦„μ°¨μˆœ μ •λ ¬

c = 0                                                               # μˆœμ„œ 담을 c ν• λ‹Ή

for i in n_list:                                                    # n_list μš”μ†Œ 반볡
    c += 1                                                          # c 1μ”© 증가
    if i == m:                                                      # λ§Œμ•½ iκ°€ m이면
        print(c)                                                    # c 좜λ ₯
        break                                                       # 반볡문 μ’…λ£Œ

 

λ‹€λ₯Έ μ‚¬λžŒ 풀이

# 이뢄검색

'''
lt, rt
0 1 2 3 4 5 6 7
12 23 32 57 65 81 87 99

mid = (lt + rt) // 2

3 = mid

a[mid] == m

rt = mid - 1
lt = mid + 1

μ ˆλ°˜μ”© μ’ν˜€ λ‚˜κ°

1 = mid

lt, rt = 2

λ§Œμ•½ 1024개의 데이터가 μžˆλ‹€λ©΄
512개둜 쀄어듦
256으둜 절반으둜 쀄어듦
128μ”© μž‘μ•„μ§€λ©΄

이뢄검색 log nλ²ˆλ§Œμ— λœλ‹€.
'''

n, m = map(int, input().split())
a = list(map(int, input().split()))
a.sort()
lt = 0
rt = n-1
while lt <= rt:
    mid = (lt + rt) // 2
    if a[mid] == m:
        print(mid + 1)
        break
    elif a[mid]>m:
        rt = mid - 1
    else:
        lt = mid + 1

+ Recent posts