반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
11-07 11:40
관리 메뉴

ImJay

[파이썬/Python] 백준 1920번 수 찾기 본문

Solved.ac - Python/CLASS 2

[파이썬/Python] 백준 1920번 수 찾기

ImJay 2023. 5. 2. 16:23
반응형

[파이썬/Python] 백준 1920번 수 찾기

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net


문제

N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

출력

M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.

예제 입력

5
4 1 5 2 3
5
1 3 7 9 5

예제 출력

1
1
0
0
1

 

풀이 1

이진탐색을 이용한 탐색

import sys

# 첫번째 수열 입력 받기
n = int(sys.stdin.readline())
a = list(map(int, sys.stdin.readline().split()))

# 두번째 수열 입력 받기
m = int(sys.stdin.readline())
b = list(map(int, sys.stdin.readline().split()))

# 첫번째 수열 정렬
a.sort()

# 이분 탐색을 통한 두번째 수열의 원소 찾기
for num in b:
    left, right = 0, n - 1
    found = False

    while left <= right:
        mid = (left + right) // 2
        if num == a[mid]:
            found = True
            print(1)
            break
        elif num > a[mid]:
            left = mid + 1
        else:
            right = mid - 1

    if not found:
        print(0)

풀이 2

집합을 이용한 탐색

import sys

# 첫번째 수열 입력 받기
n = int(sys.stdin.readline())

# 첫번째 수열을 set으로 저장
a = set(map(int, sys.stdin.readline().split()))

# 두번째 수열 입력 받기
m = int(sys.stdin.readline())
b = list(map(int, sys.stdin.readline().split()))

# 두번째 수열의 각 원소에 대해 첫번째 수열에 포함되어 있는지 확인하여 출력
for num in b:
    print(1) if num in a else print(0)

이 코드는 이진탐색 대신 파이썬의 set을 이용하여 구현한 코드이다. 첫번째 수열을 set으로 변환하면, 원소의 탐색 속도가 매우 빨라진다. 그래서 간단한 if문으로 두번째 수열의 각 원소가 첫번째 수열에 포함되어 있는지 확인할 수 있다. 이 방법은 이진탐색보다 더 간단하고 직관적인 코드를 작성할 수 있어서 유용하다.

참고자료

 

[Python] 파이썬 in 연산 시간복잡도

파이썬에는 in 연산자가 있다. 보통 리스트, 튜플, 집합, 딕셔너리 같이 연속적인 자료구조에 속한 멤버를 확인하거나 순회할 때 사용한다. 그렇다면 in 연산자의 시간복잡도는 어떻게 될까? List l

otugi.tistory.com

 

[BOJ] 백준 1920번 수 찾기 (Python)

백준 1920번 수 찾기 [ 실버 4 ] 풀이 python

velog.io

 

 

 

반응형
Comments