5207. [파이썬 S/W 문제해결 구현] 4일차 - 이진 탐색

Sarah·2021년 10월 19일
0

SWE

목록 보기
18/19

문제 출처 : 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))

장애물1

문제

주어진 샘플 입력값에서 A리스트가 모두 저렬되어 나와있어서
기본적으로 정렬되어 나오는구나 생각하고 코드작성
-> 오류 발생 (8/10 개만 패스)

해결

해결은 매우 쉬웠다. A.sort()
어디가 잘못된건지 찾느라 시간이 오래걸렸다. ㅠ

profile
2021.06 ~

0개의 댓글