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 |
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 |