μ½”λ”©ν…ŒμŠ€νŠΈ κ΄€λ ¨ λ‚΄μš©μ •λ¦¬ (2)
μ½”λ”©ν…ŒμŠ€νŠΈ

μ½”λ”©ν…ŒμŠ€νŠΈ κ΄€λ ¨ λ‚΄μš©μ •λ¦¬ (2)

β–Όβ–Όβ–Ό 이전글 λ³΄λŸ¬κ°€κΈ° β–Όβ–Όβ–Ό

2021/02/20 - [μ½”λ”©ν…ŒμŠ€νŠΈ] - μ½”λ”©ν…ŒμŠ€νŠΈ κ΄€λ ¨ λ‚΄μš© 정리 (1)

 

μ½”λ”©ν…ŒμŠ€νŠΈ κ΄€λ ¨ λ‚΄μš© 정리 (1)

그리디 ; ν˜„μž¬ κ°€μž₯ μ’‹μ•„ λ³΄μ΄λŠ” κ²ƒλ§Œμ„ μ„ νƒν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ - ν˜„μž¬ μƒν™©μ—μ„œ μ§€κΈˆ λ‹Ήμž₯ 쒋은 κ²ƒλ§Œ κ³ λ₯΄λŠ” 방법 - λ§€ μˆœκ°„ κ°€μž₯ μ’‹μ•„λ³΄μ΄λŠ” 것을 μ„ νƒν•˜λ©°, ν˜„μž¬μ˜ 선택이 λ‚˜μ€‘μ— λ―ΈμΉ  영ν–₯에 λŒ€ν•΄

wisecoding.tistory.com

 

파이썬 νŠœν”Œμ˜ νŠΉμ§•

- νŒŒμ΄μ¬μ—μ„œ νŠœν”Œμ„ μ›μ†Œλ‘œν•˜λŠ” λ¦¬μŠ€νŠΈκ°€ μžˆμ„ λ•Œ, 리슀트λ₯Ό μ •λ ¬ν•˜λ©΄ 기본적으둜 각 νŠœν”Œμ„ κ΅¬μ„±ν•˜λŠ” μ›μ†Œμ˜ μˆœμ„œμ— 맞게 μ •λ ¬λœλ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

 

파이썬 count ν•¨μˆ˜

- ν•΄λ‹Ή λ¦¬μŠ€νŠΈμ—μ„œ 값이 λͺ‡κ°œ μžˆλŠ”μ§€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

 

 

이진탐색(Binary Search) ; 탐색 λ²”μœ„λ₯Ό 반으둜 μ’ν˜€κ°€λ©° λΉ λ₯΄κ²Œ νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜


- 이진탐색은 λ°°μ—΄ λ‚΄λΆ€μ˜ 데이터가 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Όλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” μ•Œκ³ λ¦¬μ¦˜

- 탐색 λ²”μœ„λ₯Ό μ ˆλ°˜μ”© μ’ν˜€κ°€λ©° 데이터λ₯Ό νƒμƒ‰ν•˜λŠ” νŠΉμ§•μ΄ 있음

- μ°ΎμœΌλ €λŠ” 데이터와 쀑간점에 μœ„μΉ˜ν•΄ μžˆλŠ” 데이터λ₯Ό 반볡적으둜 λΉ„κ΅ν•΄μ„œ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎλŠ” 것

- 탐색 λ²”μœ„κ°€ 2,000λ§Œμ„ λ„˜μ–΄κ°€λŠ” 경우, μ²˜λ¦¬ν•΄μ•Ό ν•  λ°μ΄ν„°μ˜ κ°œμˆ˜λ‚˜ 값이 1,000만 λ‹¨μœ„ μ΄μƒμœΌλ‘œ λ„˜μ–΄κ°€λŠ” 경우 

- μ‹œκ°„λ³΅μž‘λ„ O(logN)

 

β–Ά μž¬κ·€ν•¨μˆ˜ μ‚¬μš©

# μž¬κ·€ν•¨μˆ˜λ‘œ κ΅¬ν˜„ν•œ 이진 탐색 μ†ŒμŠ€μ½”λ“œ
def binary_search(array, target, start, end):
	if start>end: 
    	return None # μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ
    
    mid = (start+end)//2 # λͺ« μ—°μ‚°μž int((start+end)/2) 
    # target이 μ‘΄μž¬ν•˜λ©΄ 인덱슀 리턴
    if array[mid]==target:
    	return mid
    # 타켓이 쀑간값보닀 μž‘μ€ 경우 μ™Όμͺ½ 확인  
    elif array[mid] > target: 
    	return binary_search(array, target, start, mid-1) # 끝점을 쀑간점 μ „μœΌλ‘œ 이동
    else:
    	return binary_search(array, target, mid+1, end) # μ‹œμž‘μ μ„ 쀑간점 λ‹€μŒμœΌλ‘œ 이동
  

  # ν•¨μˆ˜ 호좜
  result=binary_search(array, target, 0, n-1)
  if result==None:
  	print("μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ")
  else:
  	print(result+1)
  
     

β–Ά 반볡문 μ‚¬μš©

# λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•œ 이진 탐색 μ½”λ“œ
def binary_search(array, target, start, end):
	while start<=end:
    	mid=(start+end)//2
        
        if array[mid]==target:
        	return mid # 찾음
        elif array[mid] > target:
        	end = mid-1
        else:
        	start = mid+1
    
    return None # μ—†μŒ
    
 result=binary_search(array, target,0,n-1)
 if result==None:
 	print("μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ")
 else:
 	print(result+1)

 

λΉ λ₯΄κ²Œ μž…λ ₯λ°›κΈ°

- λ°μ΄ν„°μ˜ κ°œμˆ˜κ°€ 1000만개 이상 / 탐색 λ²”μœ„κ°€ 1000μ–΅ 이상인 경우 

- sys 라이브러리의 readline() ν•¨μˆ˜λ₯Ό μ΄μš©ν•  것

import sys
input_data = sys.stdin.readline().rstrip() # rstrip() ν•„μˆ˜!!!!

 

λ¬Έμžμ—΄ λ’€μ§‘κΈ°
name = 'james'
print(name[::-1])

 

 

 

μ°Έκ³ λ¬Έν—Œ 및 좜처 | λ‚˜λ™λΉˆ. 2020. 이것이 취쀀을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈλ‹€ with 파이썬. ν•œλΉ›λ―Έλ””μ–΄