수 찾기 [ Python ] [ 백준 : 1920 ]
2023. 5. 28. 20:23ㆍ알고리즘/백준
풀이 및 회고
이분 탐색에 대해 공부할 수 있는 문제이다. 문제를 읽고 이분 탐색을 공부했다.
정렬된 값의 가운데 값을 기준으로 찾을 값 보다 적은지 큰지를 비교하며 찾아내는 알고리즘이었다.
문제는 1 3 7 9 5 를 찾는데 4 1 5 2 3 중에 1 이 포함되어 있다면 1을 출력하고 3이 포함되어 있으면 1을 출력하고 7이 포함되어 있지 않으므로 0 을 출력하고 9 가 포함 안되있기 때문에 0 을 출력하고 5 가 포함되어 있어 1 을 출력한다.
처음 해본 탐색문제인데 어려웠으나 메모리를 줄이는 과정이 즐거웠다.
이런 탐색을 어디에 활용하는지 알아보니 더 흥미로웠다. 잘은 모르지만 나중에 검색같은걸 구현할때도 활용하면 데이터를 쓸데없이 탐색하는 일을 줄일 수 있을 것같다.
# 수 찾기
#알고리즘
# 1. n을 입력받는다.
n = int(input())
# 2. A 를 리스트 형태로 n 만큼 입력받는다.
A = list(map(int, input().split()))
# 3. m 을 입력받는다.
m = int(input())
# 4. B 를 리스트 형태로 m 만큼 입력받는다.
B = list(map(int, input().split()))
# 5. A 를 sort 로 정렬한다
A.sort()
# 6. for 문 선언해 인덱스 값을 확인한다.
answer = []
for b in B:
start,end = 0,n-1
# while 문 선언 start 와 end 변수를 이용해 탐색을 구현
while start <= end:
# 7. n 의 중간값을 찾고, middle 이란 변수에 저장한다.
middle = (start + end) // 2
# 찾고자 하는 b 의 값이 A[middle] 과 같다면 answer 리스트에 추가하고 break 를 통해 while 문을 탈출한다.
if A[middle] == b:
answer.append(1)
break
# 8. 찾고자 하는 b의 값이 middle 보다 적다면 앞의수를 확인한다.
elif A[middle] > b:
end = middle - 1
# 9. 찾고자 하는 m의 값이 middle 보다 크다면 뒤의수를 확인한다.
else:
start = middle + 1
else: # 찾고자 하는 값이 없다면 0 을 추가한다
answer.append(0)
# 출력한다.
for ans in answer:
print(ans)
탐색문제 재밌숨
'알고리즘 > 백준' 카테고리의 다른 글
블랙잭 [ Python ] [ 백준 : 2798 ] (0) | 2023.05.29 |
---|---|
숫자 카드 2 [ Python ] [ 백준 : 10816 ] (1) | 2023.05.28 |
균형잡힌 세상 [ Python ] [ 백준 : 4949 ] (0) | 2023.05.27 |
스택 수열 [ Python ] [ 백준 : 1874 ] (1) | 2023.05.27 |
약수 [ Python ] [ 백준 : 1037 ] (0) | 2023.05.27 |