본문 바로가기
개발일지/Python

파이썬 선형검색으로 내가 찾는 숫자가 난수리스트에 있는지 확인하는 알고리즘

by 개발에정착하고싶다 2022. 5. 19.
320x100
# 선형검색

# 숫자로 이루어진 릿그트에서 사용자가 입력한 숫자를 검색하는 모듈을 다음 요건에 따라 만들자
# 1. 검색 모듈은 선형 검색 알고리즘을 이용하자
# 2. 리스트는 1부터 20까지의 정수 중에서 난수 10개를 이용하자
# 3. 검색 과정을 로그로 출력하자.
# 4. 검색에 성공하면 해당 정수의 인덱스를 출력하고, 검색 결과가 없다면 -1을 출력하자

 

# 내가 만든코드
import random as rd

list_main = rd.sample(range(1,20),10)


searching_number = int(input('찾으려는 숫자 입력: '))
print(list_main)
for a,b in enumerate(list_main):

    if searching_number == b:
        print(f'Search Number: {b}')
        print('Search SUCCESS!!')
        print(f'Search result INDEX: {a}')
        print('>>> Search Results <<<')
        print(f'Search result index: {a}')
        print(f'Search result Number: {b}')
        break
    else:
        print('-1')
        print(f'Search Number: {b}')
        print('Search Fail try again!!')

# 결과적으로야 맞다만 이게 선형검색 알고리즘은 뭔가 아닌것같다 본능적으로.

 

해답코드

첫번째 파일

lineMod

 

# 매게변수. 외부에서 받을 숫자가 ns, 내가 찾으려는 숫자가 sn
def searchNumberByLineAlgorithm(ns, sn):

    searchResultIdx = -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:
            searchResultIdx = n
            print('search success!')
            print(f'search result index: {searchResultIdx}')
            break

        n += 1

    return searchResultIdx

 

두번째 파일

ex

 

# 해답코드

import lineMod
import random

# 이걸 왜써주는지 모르겠다.
if __name__ == '__main__':

    rNums = random.sample(range(1,21),10)
    searchNum = int(input('input search number: '))

    resultIdx = lineMod.searchNumberByLineAlgorithm(rNums, 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: {rNums[resultIdx]}')
300x250