초보 개발자의 일기

부품 찾기 본문

코딩테스트/이것이 코딩테스트다.(Python)

부품 찾기

판다꼬마 2022. 7. 7. 20:17
728x90

문제

 

 

 

입력

  • 첫째 줄에 정수 N이 주어진다. (1 <=N <=1000000)
  • 둘째 줄에는 공백으로 구분하여 N개의 정수가 주어진다. 이때 정수는 1보다 크고, 1000000 이하이다.
  • 셋째 줄에는 정수 M이 주어진다. (1 <=M <=100000)
  • 넷째 줄에는 공백으로 구분하여 M개의 정수가 주어진다. 이때 정수는 1보다 크고 1000000 이하이다.

 

출력

첫째 줄에 공백으로 구분하여 각 부품이 존재하면 yes를 없으면 no를 출력한다.

 

입력 예시

5
8 3 7 9 2
3 5 7 9

출력 예시

no yes yes

풀이 방법

어떻게 풀었니

내 코드


def binary_search(array, target, start, end):
    while start <= end:
        mid = (start + end) // 2
        # 찾은 경우 중간점 인덱스 반환
        if array[mid] == target:
            return mid
        # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
        elif array[mid] > target:
            end = mid - 1
        # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
        else:
            start = mid + 1
    return None


    
n=int(input())
a=list(map(int,input().split()))
m=int(input())
b=list(map(int,input().split()))
a.sort()

for i in b:
    result=binary_search(a,i,0,n-1)
    if result == None:
        print("yes", end=" ")
    else:
        print("no", end=" ")

Solution

# N(가게의 부품 개수) 입력
n = int(input())
array = [0] * 1000001

# 가게에 있는 전체 부품 번호를 입력 받아서 기록
for i in input().split():
    array[int(i)] = 1

# M(손님이 확인 요청한 부품 개수) 입력
m = int(input())
# 손님이 확인 요청한 전체 부품 번호를 공백을 기준으로 구분하여 입력
x = list(map(int, input().split()))

# 손님이 확인 요청한 부품 번호를 하나씩 확인
for i in x:
    # 해당 부품이 존재하는지 확인
    if array[i] == 1:
        print('yes', end=' ')
    else:
        print('no', end=' ')
//계수정렬

느낀 점

이진 탐색 코드를 정확히 이해하지 못해 코드를 보고 작성을 하였다.

다시 이진 탐색 코드를 재귀적 방법과 반복적 방법에 대해 공부해야겠다.

728x90

'코딩테스트 > 이것이 코딩테스트다.(Python)' 카테고리의 다른 글

1로 만들기  (1) 2022.07.10
다이나믹 프로그래밍  (1) 2022.07.09
트리 자료구조  (1) 2022.06.29
탐색(순차, 이진)  (2) 2022.06.28
두 배열의 원소 교체  (0) 2022.06.28