ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이진 탐색
    Base Line/알고리즘 2022. 2. 22. 15:23

    출처 : 이코테

     

    순차탐색이란 
    리스트 안에 있는 특정한 데이터를 찾기 위해 
    앞에서부터 데이터를 하나씩 차례대로 확인하는 방법

    def sequential_search(n,target,array):
        for i in range(n):
            if array[i]== target:
                return i + 1

    print("생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요.")
    input_data = input().split()
    n = int(input_data[0])
    target = input_data[1]

    array = input().split()

    print(sequential_search(n,target,array))
     
     
     
     

    이진 탐색
    반으로 쪼개면서 탐색하기
    변수 3개 사용 시작점, 끝점, 중간점
    찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 탐색

     

    #재귀함수로 구현
    def binary_search(array, target, start,end):
        if start > end :
            return None

        mid = (start+end)//2
        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)
       
    n,target = list(map(int,input().split()))
    array = list(map(int,input().split()))

    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
    n,target = list(map(int,input().split()))
    array = list(map(int,input().split()))
    result = binary_search(array,target, 0 ,n-1)
    if result ==None:
        print("원소가 존재하지 않습니다.")
    else:
        print(result +1)

       
     
    저자분께서 어느정도 암기를 해놓으라고 하신 부분이다
    반복 타이핑으로 암기하자 ㅎ
     
     
    팁은
    탐색 범위 2000만 넘기면 이진 탐색 고려

     

    'Base Line > 알고리즘' 카테고리의 다른 글

    DFS 업데이트  (0) 2022.10.25
    DFS/BFS  (0) 2022.02.14
    정렬  (0) 2022.02.08
Designed by Tistory.