본문 바로가기

나 취준생/파이썬

이진 탐색

320x100

코드 1


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
a=[1,7,11,12,14,23,33,47,51,64,67,77,139,672,871]
num=int(input('검색할 숫자를 입력하세요 : '))
cnt=0 # 검색 횟수 변수 선언
 
while(True):
    cnt+=1 # 검색 횟수 1씩 증가
 
    import numpy as np
    a_n=np.array(a)
 
    if len(a)%2==1:    # 리스트의 요소의 개수가 홀수면 np.median(a_n)하면 바로 나오지만
        a_m=int(np.median(a_n))
    else:                  # 짝수면 가운데 값 두 개를 더해서 반으로 나눈 값을 반환해서 줘서 리스트의 없는 중위값이 나와버림
        a_m=a[len(a)//2]  # 그래서 중위값을 그 두 개의 가운데 값 중 오른쪽 값을 중위값이라 따로 정의
 
    if len(a)==1# 계속 쪼개다가 남은 리스트의 개수가 1개가 되면 while문을 어떻게든 끝내야하기 때문에 따로 조건문
        if num==a_m:
            print(num,'은 이진탐색 ', cnt, '번 만에 검색되었습니다')
            break
        else:
            print(num, '은 리스트에 없습니다')
            break
    if num==a_m:
        print(num,'은 이진탐색 ', cnt, '번 만에 검색되었습니다')
        break # 검색되면 바로 while문을 끝내야 함
    elif num>a_m:
        del a[:a.index(a_m)]
    else:
        del a[a.index(a_m):]




코드 2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
a=[1,7,11,12,14,23,33,47,51,64,67,77,139,672,871]
num=int(input('검색할 숫자를 입력하세요 : '))
cnt=0 # 검색 횟수 변수 선언
 
while(True):
    cnt+=1 # 검색 횟수 1씩 증가
 
    import numpy as np
    a_n=np.array(a)
 
    if len(a)%2==1:    # 리스트의 요소의 개수가 홀수면 np.median(a_n)하면 바로 나오지만
        a_m=int(np.median(a_n))
    else:                  # 짝수면 가운데 값 두 개를 더해서 반으로 나눈 값을 반환해서 줘서 리스트의 없는 중위값이 나와버림
        a_m=a[len(a)//2]  # 그래서 중위값을 그 두 개의 가운데 값 중 오른쪽 값을 중위값이라 따로 정의
 
    if num==a_m:
        print(num,'은 이진탐색 ', cnt, '번 만에 검색되었습니다')
        break # 검색되면 바로 while문을 끝내야 함
    elif num>a_m:
        del a[:a.index(a_m)+1]
    else:
        del a[a.index(a_m):]
 
    if len(a)==0:
         print(num, '은 리스트에 없습니다')
         break

s

del 조건을  del a[:a.index(a_m)+1]로 해서

리스트가 1개씩 남는 일이 아예 없도록 해버리도록 수정.


그러면 len(a)는 0이 되고 자동으로, 맞는게 없었다는 것을 의미함과 동시에

간편하게 while문을 탈출할 수 있음






반응형

'나 취준생 > 파이썬' 카테고리의 다른 글

탐욕 알고리즘  (0) 2020.12.23
버블 정렬  (0) 2020.12.23
합성곱 연산 알고리즘  (0) 2020.12.22
폐 사진 이미지를 숫자로 변환  (0) 2020.12.22
웹 스크롤링 연습 ( 유튜브 댓글 )  (0) 2020.12.22