201217 개발일지(10일차) - 파이썬 input()과 sys.stdin.readline() 비교, 이진검색 함수 작성

고재개발·2020년 12월 17일
0

Algorithm

목록 보기
7/26

대개 백준문제를 풀다보면 sys.stdin.readline()을 활용하는 게 input()보다 속도 면에서 유리하다고 써있는 경우가 많다. (ex : https://dailyheumsi.tistory.com/32)

그런데 sys.stdin과 sys.stdin.readline()은 개행문자("\n")을 같이 호출해주기 때문에 유의해야 한다!

코드를 작성하고 틀린 것을 못찾았는데 이 부분 때문에 1시간 정도 헤매었다.. 기억하기 위해 기록하자.

와 근데, sys.stdin과 sys.stdin.readline() 및 sys.stdin.readlines() 를 비교하다가 2시간 더 날렸다. 와우.. 공식 문서에도 제대로 못찾겠어서 일단은 Skip..

무튼 요점인 input()과 sys.stdin.readline()의 차이점은 개행문자("\n")의 유무이다.

# input() 사용 				# sys.stdin.readline() 사용 				
for line in input():			for line in sys.stdin.readline()
    print(type(line))			    print(type(line))
# 결과					#결과
#<class 'str'>				#<class 'str'>				
#<class 'str'>				#<class 'str'>				
#<class 'str'>				#<class 'str'>				
					#<class 'str'>				

위와 같이 sys.stdin.readline()은 가장 오른 쪽에 "\n"이 붙어 나온다.
※ 이를 위해 rstrip()을 붙여주곤 한다.

이진 검색은 배열을 정렬한 상태에서 활용 가능

개념은 아래 그림과 같다. middle 값을 계속 변경해주면서 값을 찾아나가는 것이다.

이진검색 함수를 짜면 아래와 같다. 주석 잘 보고 파이팅하자. 주석을 잘 적는 연습을 하자!

def bin_search(a, key):             	   #a에서 key와 일치하는 원소를 이진 검색 하는 함
    low = 0	                           #검색 범위 맨 앞 원소의 인덱스
    high = len(a) - 1                      #검색 범위 맨 끝 원소의 인덱스
    while True :
        middle = (low + high) // 2         #중앙 원소 인덱스
        if a[middle] == key:
            return True                    #검색 성공
        elif a[middle] < key:
            low = middle +1
        else :
            high = middle -1
        if low > high:
            break
    return False
profile
고재개발

2개의 댓글

comment-user-thumbnail
2020년 12월 18일

오 업다운 게임인가!!??!!??

1개의 답글