Search

선형검색

datas = [3,2,5,7,9,1,0,8,6,4] searchData = int(input('찾으려는 숫자 입력: ')) searchResultIdx = -1 # 존재하지 않는 인덱스로 초기화 n = 0 # 인덱스 while True: if n == len(datas): searchResultIdx = -1 # 찾으려는 숫자가 없다면 다시 초기화 break elif datas[n] == searchData: searchResultIdx = n break n += 1 print(f'searchResultIdx : {searchResultIdx}')
Python
복사

보초법

마지막 인덱스에 찾으려고 하는 값을 의도적으로 집어넣어 마지막 인덱스에서 찾으면 못찾은 것이라고 판단하는 기술
예를 들어 숫자 9를 찾으려고 한다고 하면
인위적으로 마지막 인덱스에 9를 삽입해서
검색 성공 : 마지막 인덱스 이전에 9가 검색될 경우
검색 실패 : 마지막 인덱스에서 9가 검색된 경우
datas = [3,2,5,7,9,1,0,8,6,4] searchData = int(input('찾으려는 숫자 입력: ')) searchResultIdx = -1 # 존재하지 않는 인덱스로 초기화 # 1. 인위적으로 마지막에 추가한다. datas.append(searchData) n = 0 while True: if datas[n] == searchData: # 일치하는 값이 있다고 할 때 if n != len(searchData) - 1: #일치하는 값이 마지막 인덱스가 아닐 경우 searchResultIdx = n break # 일치하는 값이 중간에서 발생하든, 마지막 인덱스이든 while 문은 빠져나와야 한다. n += 1 print(f'datas: {datas}') print(f'datas length: {len(datas)}') print(f'searchResultIdx: {searchResultIdx}')
Python
복사
ex 1.
# 리스트에서 가장 앞에 있는 숫자 '7'을 검색하고 위치를 출력하자. nums = [4,7,10,2,4,7,0,2,7,3,9] for i in range(len(nums)): # 리스트의 전체 개수만큼 확인한다. if nums[i] == 7: print(f'숫자 7의 위치: {i}') break if i == len(nums) -1: print('찾는 숫자가 없습니다.') # 숫자 7을 모두 검색해서 각각의 인덱스와 검색 개수를 출력하자 nums = [4,7,10,2,4,7,0,2,7,3,9] idx = [] count = 0 for i in range(len(nums)): # 리스트의 전체 개수만큼 확인한다. if nums[i] == 7: print(f'숫자 7의 위치: {i}') count += 1 idx.append(i) continue print(f'7의 모든 인덱스 위치: {idx}') print(f'7의 총 개수: {count}')
Python
복사
 보초법 활용하기
# 리스트에서 가장 앞에 있는 숫자 '7'을 검색하고 위치를 출력하자. nums = [4,7,10,2,4,7,0,2,7,3,9] searchData = int(input('input search Number :')) searchResultIdx = -1 nums.append(searchData) n = 0 while True: if nums[n] == searchData: if n != len(nums)-1: searchResultIdx = n break n += 1 # 입력한 숫자의 모든 인덱스 위치와 개수를 출력하자. nums = [4,7,10,2,4,7,0,2,7,3,9] searchData = int(input('input search Number :')) searchResultIdx = [] nums.append(searchData) n = 0 while True: if nums[n] == searchData: if n != len(nums) - 1: searchResultIdx.append(n) break n += 1
Python
복사
# line.py def SearchNumberByline(ns,sn): searchNumberIdx = -1 # 일단 찾은 숫자의 Index 를 -1로 초기화 print(f'Numbers : {ns}') print(f'search Numbers : {sn}') # 선형 검색 시작 n = 0 while True: if n == len(ns): # 찾는 숫자를 찾지 못한 경우 print('Search Fail!') break if ns[n] == sn: searchNumberIdx = n print('Search success!') print(f'Search result Index : {searchNumberIdx}') break n += 1 return searchNumberIdx
Python
복사
# 숫자로 이루어진 리스트에서 사용자가 입력한 숫자를 검색하는 모듈을 만들자 # 검색 모듈을 선형 검색을 이용한다 # 리스트는 1 ~ 20 까지의 정수 중에서 난수 10개를 이용한다. # 검색 과정을 로그로 출력하자 # 검색에 성공하면 해당 정수의 인덱스를 출력하고 검색 결과가 없다면 -1을 출력하자. import line import random nums = random.sample(range(1,21),10) searchNum = int(input('검색할 숫자: ')) resultIdx = line.SearchNumberByline(nums,searchNum) if resultIdx == -1: # 찾은 숫자가 없는 경우 print('No results found!') print(f'search result index : {resultIdx}') else: # 찾은 숫자가 있는 경우 print('>>> Search Results <<<') print(f'search result index : {resultIdx}') print(f'search result number : {nums[resultIdx]}')
Python
복사