일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 월드프렌즈
- 월드프렌즈 ICT 봉사단
- 울란바토르
- 알고리즘
- ICT봉사단
- Python
- 교환학생
- 초원
- LG글로벌챌린저
- algorithm
- 아부다비
- SWEA
- 여행
- 테를지
- 몽골 헬스장
- 테를지국립공원
- 헬스
- 게르
- 독일
- 담슈타트
- 몽골
- 몽골요리
- 몽골 고기
- 칭기즈칸
- 코로나
- 한 줄로 서기
- 칭기스칸 동상
- 파이썬
- 백준
- 소프트웨어 아카데미
Archives
- Today
- Total
맛있는물회
[맛있는물회] [파이썬] <백준 알고리즘> 1920번 "수 찾기" 본문
문제 조건
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
Input
첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
Output
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
생각한 아이디어
당연히 브루트포스로 풀면 안되니깐 정답률이 28프로겠지??
이분탐색느낌..
솔직히 이분탐색이라는 힌트만 얻으면 쉽게 풀수 있는 문제이다.
입력받는 arr값을 정렬해준 다음 이분탐색으로 log(n)의 시간복잡도로 n개를 풀면 nlog(n)이니깐 충분히 가능!
이진탐색 문제가 진짜 꼬아서 나오면 정말 답도 없게 어려울 듯 하다..
많이 풀어보자!
소스코드
import sys
import operator
input=sys.stdin.readline
def find(target,arr):
front,rear=0,len(arr)-1
flag=0
while rear>=front:
mid=(front+rear)//2
if arr[mid] >= target:
if arr[mid]==target:
flag=1
break
rear=mid-1
else:
front=mid+1
return flag
if __name__ == "__main__":
n=int(input())
arr1=list(map(int,input().split()))
m=int(input())
arr2=list(map(int,input().split()))
arr1=sorted(arr1)
for a in arr2:
print(find(a,arr1))
*파이썬 문법 정리
'IT > 알고리즘' 카테고리의 다른 글
[맛있는물회] [파이썬] <백준 알고리즘> 9251번 "LCS" (최장 공통 부분 수열 찾기) (0) | 2020.06.05 |
---|---|
[맛있는물회] [파이썬] <백준 알고리즘> 6593번 "상범 빌딩" (0) | 2020.06.05 |
[맛있는물회] [파이썬] <백준 알고리즘> 1339번 "단어 수학" (0) | 2020.06.04 |
[맛있는물회] [파이썬] <파이썬 문법> 딕셔너리 정렬하기 (7) | 2020.06.04 |
[맛있는물회] [파이썬] <백준 알고리즘> 1300번 "K번째 수" (0) | 2020.06.04 |
Comments