1920 - 수 찾기

2025. 4. 20. 01:51·백준 - 파이썬

https://www.acmicpc.net/problem/1920

 

1. 문제 이해하기

N개의 정수 A1, A2, ..., AN이 주어져 있음. 이때 정수 M개가 주어졌을 때, 이 수들이 A안에 존재하는지 판단.

 

- 입력 형식

첫째 줄에 자연수 N

둘째 줄에 N개의 정수 A1, A2, ..., AN

셋째 줄에 자연수 M

넷째 줄에 M개의 정수 x1, x2, ..., xM (찾고 싶은 수들)

 

- 출력 형식

M개의 정수에서 각각의 수가 A안에 존재하면 1, 없므녀 0출력

 

A배열 = [4, 1, 5, 2, 3]

찾고 싶은 수들 = [1, 3, 7, 9, 5]

출력 : 1 1 0 0 1

 

A배열에 어떤 수가 존재해야 하는지 파악해야함 --> 자료구조 공부용 이진탐색으로 풀이.

 

생각한 알고리즘

1. 먼저 이진탐색 써야하니까 A배열을 정리함

2. 이진탐색 : M개의 수를 하나씩 꺼내면서 A배열에 있는지 없는지를 찾음

3. 찾으면 1 출력하고 아니면 0

 

 

2. 문제 풀이

def binary_search(array, target):
    left = 0        # 탐색 범위 시작 인덱스
    right = len(array) - 1      # 탐색 범위 끝 인덱스
    while left <= right :
        mid = (left + right) // 2
        if array[mid] == target:
            return True
        elif array[mid] > target:   # 중간값이 찾는 값보다 크면
            right = mid - 1     # right을 mid 왼쪽으로 옮김
        else:                   # 중간값이 찾는 값보다 작으면
            left = mid + 1      # left를 mid 오른쪽으로 옮김
    return False

N = int(input())
A = list(map(int, input().split()))
A.sort()
M = int(input())
target = list(map(int, input().split()))

for item in target:
    if binary_search(A, item):
        print(1)
    else:
        print(0)

 

 

'백준 - 파이썬' 카테고리의 다른 글
  • 1991 - 트리 순회
  • 2309 - 일곱 난쟁이
  • 1157 - 단어 공부
  • 10870 - 피보나치 수 5
seo_young
seo_young
  • seo_young
    86400개의 발자국
    seo_young
  • 전체
    오늘
    어제
    • 분류 전체보기 (53) N
      • 리눅스 (11)
      • 웹 기초 (9)
      • 회로이론1 (1)
      • 자료구조 (15)
      • 백준 - C (7) N
      • 백준 - 파이썬 (7)
      • 크롤링 스터디 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seo_young
1920 - 수 찾기
상단으로

티스토리툴바