result = [] for card in card_list: result.append(existCard(card,my_card))
print(" ".join(result))
시간 초과 발생한 이유는, idx가 아닌 배열 자체를 잘랐기 때문에! 배열 자체를 반 씩 자르고 저장하고 이래서 시간 초과가 발생했다. 이진 탐색을 할 때에는 배열은 그대로 두고 인덱스를 바꿔가면서 찾도록 하자! while은 true말고 조건을 달아주자! 이번의 경우는 start_idx는 계속 늘어나고 end_idx는 계속 줄어드니까 + end_idx가 무조건 같거나 커야하므로 start_idx ≤ end_idx로 설정
idx에 +1, -1을 하는 이유는, idx가 반복되는 일을 방지하기 위해서다. idx가 될 수 있는 수는 start_idx보다 크거나 같은 경우인데 idx가 start_idx보다 큰 경우, idx가 start_idx보다 제일 작은 1만큼 더 크다고 했을 때, idx+1을 하게 되면 2차이가 나므로 나누기 2를 하면, 이전 idx와 항상 다르게 된다.
idx가 start_idx와 같은 경우, (start,end,idx)라고 할 때 (2, 2, 2)나 (2, 3, 2)를 예로 들어보자. (2, 2, 2)의 경우, idx+1을 만나면 (3,2,2)가 되어 start > end가 되므로 while이 끝나 버린다. idx-1을 만나도 마찬가지이다. 그리고 (2, 3, 2)의 경우, idx+1을 만나면 (3,3,2)가 되어 idx가 바뀐다. idx-1을 만나면 (2, 1, 2)가 되어 while이 끝나 버린다! 계속 이어서 end_idx = idx-1도 살펴보면, idx가 될 수 있는 수는 idx와 같거나 작은 수인데, idx가 end_idx보다 작은 경우, idx - 1을 하면 최소 2이상의 차이가 나므로 이전 idx와 항상 다르게 된다. idx가 end_idx와 같은 경우, (2, 2, 2)가 있는데 idx-1을 하면 while이 끝나 버린다.