본문 바로가기

프로그래밍 회고록/Python

2021.12.20 부품찾기

728x90
반응형

# 오늘의 문제

부품 찾기

난이도 중 | 풀이시간 30분 | 시간 제한 1초 | 메모리 제한 128

 # 나의 코드

나의 코드
어레이를 받아그 안의 값에서 타겟 어레이의 원소값이 존재하는 지 찾기 위해서 루프를 돌아 있다면
있다고 답변하고 없으면 없다고 답변하는 코드 

def binary_search(array, target, start, end):
  if start > end:
    return None
  
  mid =(start + end)//2

  if array[mid] == target:
    return mid
  elif array[mid] > target:
    return binary_search(array, target, start, mid -1)
  else:
    return binary_search(array, target, mid+1 , end)


n = int(input())
array = list(map(int, input().split()))
#array.sort() 를 해주었어야 하는데 나는 빼었었었고 해당 답 코드를 보고 주석으로 적어 넣었다.

m = int(input())
arrTarget =list(map(int, input().split()))


for i in range(m):
  #타겟값
  result = binary_search(array, arrTarget[i], 0, n -1 )

  if result == None:
    print("{}가 없습니다".format(arrTarget[i]))
  else:
    print("값은 : {}".format(arrTarget[i]))

 

# 정답과의 비교

1.  내 코드는 틀렸다. 이진탐색은 탐색할 대상이 될 어레이를 sort를 했어야 한다. 

2. 나는 재귀로 이진탐색을 구현했지만 여기는 루프문으로 구현했다.

def binary_search(array, target, start, end):
	while start <= end:
    	mid = (start + end) //2
    	# ckwdms ruddn wndrkswja dlseprtm qksghks
        if array[mid] == target:
        	return mid
            
        elif array[mid] > target:
        	end = mid - 1
            
        else:
        	start = mid + 1
        
        return None
        
#N(가게의 부품 개수 ) 입력
n = int(input())
array = list(map(int, input().split()))
array.sort()

m = int(input())
x = list(map(int, input().split()))

for i in x :
	result = binary_search(array, i, 0, n-1)
    
    if result != None:
    	print('yes', end='')
    else:
    	print('no', end'')
728x90