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

 

1920번: 수 찾기

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

www.acmicpc.net

import sys

N = int(input())
my_arr_element = list(map(int, input().split()))

my_arr_element.sort()

flag_list =[]

def do_searching(start_idx, end_idx, searching_num):
    if (start_idx > end_idx):
        return

    mid = int((start_idx + end_idx) / 2)
    if my_arr_element[mid] == searching_num:
        flag_list.append(1)
        return

    if (my_arr_element[mid] > searching_num):
        end_idx = mid - 1
        do_searching(start_idx, end_idx, searching_num)
    else:
        start_idx = mid + 1
        do_searching(start_idx, end_idx, searching_num)

    return


M = int(input())
target_element = list(map(int, input().split()))
for i in range(0, M):
    flag_list.clear()
    do_searching(0,N  - 1, target_element[i])
    if (len(flag_list) == 0):
        print(0)
        continue

    print(1)
  1. 이진탐색을 이용하여 풀 수 있는 문제였습니다.
  2. 처음엔 입력으로 들어온 값을 인덱스로 처리하여 쉽게 풀 수 있을거라고 생각했지만, 이는 틀린 생각이었습니다.
  3. 왜냐하면 입력으로 음수가 들어올 수도 있기 때문입니다.
  4. 따라서 이진탐색으로 방법을 변경했습니다.

'문제풀이 > 백준' 카테고리의 다른 글

2661 - 좋은 수열  (0) 2023.01.08
2751 - 수 정렬하기 2  (0) 2023.01.06
5430 - AC  (0) 2023.01.05
6603 - 로또  (0) 2023.01.03
1406 - 에디터  (0) 2023.01.02

+ Recent posts