happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (302)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (54)
      • DevOps (4)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Patch
  • apply
  • replace
  • 18
  • 15
  • edit
  • kubernetes

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

[python] 백준 > 이분 탐색 > 수 찾기(1920)
알고리즘/알고리즘 문제

[python] 백준 > 이분 탐색 > 수 찾기(1920)

2021. 2. 3. 15:12

[문제]

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

 

[나의 풀이]

import sys
input = sys.stdin.readline

N = int(input())
AN = list(map(int, input().split()))
M = int(input())
MN = list(map(int, input().split()))

AN = sorted(AN)

for val in MN:
    start = 0
    answer = 0
    end = len(AN)-1
    while start <= end:
        mid = (start+end) // 2
        if val < AN[mid]:
            end = mid - 1
        elif val > AN[mid]:
            start = mid + 1
        if val == AN[mid]:
            answer = 1
            break
    print(answer)

 

  • 정렬을 하여 이분탐색을 통해 찾고자 하는 값이 있는지 확인한다.
  • 찾고자 하는 값 보다 현재 찾은 값이 더 크다면 end를 줄여준다.
  • 찾고자 하는 값 보다 현재 찾은 값이 더 작다면 start를 늘려준다.
  • 값이 있다면 1을 없다면 0을 프린트해준다.

[다른 사람의 풀이]

from sys import stdin, stdout
n = stdin.readline()
N = sorted(map(int,stdin.readline().split()))
m = stdin.readline()
M = map(int, stdin.readline().split())

def binary(l, N, start, end):
    if start > end:
        return 0
    m = (start+end)//2
    if l == N[m]:
        return 1
    elif l < N[m]:
        return binary(l, N, start, m-1)
    else:
        return binary(l, N, m+1, end)

for l in M:
    start = 0
    end = len(N)-1
    print(binary(l,N,start,end))

 

from sys import stdin, stdout
n = stdin.readline()
N = set(stdin.readline().split())
m = stdin.readline()
M = stdin.readline().split()

for l in M:
    stdout.write('1\n') if l in N else stdout.write('0\n')

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[python] 백준 > 이분 탐색 > 두 용액(2470)  (2) 2021.02.04
[python] 백준 > 그리디 > 단어 수학(1339)  (0) 2021.02.04
[python] 백준 > 이분 탐색 > 랜선 자르기(1654)  (0) 2021.02.03
[python] 백준 > 다익스트라 > 최단 거리(1753)  (0) 2021.02.02
[python] 백준 > bfs > 아기상어(16236)  (0) 2021.02.02
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [python] 백준 > 이분 탐색 > 두 용액(2470)
    • [python] 백준 > 그리디 > 단어 수학(1339)
    • [python] 백준 > 이분 탐색 > 랜선 자르기(1654)
    • [python] 백준 > 다익스트라 > 최단 거리(1753)
    happyso
    happyso

    티스토리툴바