문제 출처 : SW Expert Academy
B에 속한 어떤 수가 A에 들어있으면서, 동시에 탐색 과정에서 양쪽구간을 번갈아 선택하게 되는 숫자의 개수를 알아보려고 한다.
import sys
sys.stdin = open('input.txt')
def search(arr, num, position):
global ans
# num = 찾는 정수
# position = 왼쪽-1 가운데0 오른쪽-1
# arr = 찾을 리스트
start, end = 0, len(arr)-1
while start <= end:
mid = (start+end)//2
if num == arr[mid]:
ans += 1
return
elif num < arr[mid]:
if position == -1:
return
end = mid - 1
position = -1
elif num > arr[mid]:
if position == 1:
return
start = mid + 1
position = 1
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort()
B = list(map(int, input().split()))
ans = 0
for b in range(M):
search(A, B[b], 0)
print("#{} {}".format(tc, ans))
문제
주어진 샘플 입력값에서 A리스트가 모두 저렬되어 나와있어서
기본적으로 정렬되어 나오는구나 생각하고 코드작성
-> 오류 발생 (8/10 개만 패스)
해결
해결은 매우 쉬웠다. A.sort()
어디가 잘못된건지 찾느라 시간이 오래걸렸다. ㅠ