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
> 이진탐색 활용
#1. 런타임 에러
처음에는 target number가 있는 리스트들에 대한 반복문을 돌리면서 타겟이 A리스트에 있으면 if target in A: 1을 출력하고 아니면 0을 출력하도록 했다. 하지만 역시 런타임 에러가 났다.
1초당 1억번의 연산을 할 수 있다고 하면 n과 m에 최대 100,000개의 정수가 들어가기 때문에 최악의 경우 10억번 이상의 연산이 필요하기 때문이다. 시간 제한이 2초니 당연히 런타임 에러가 난다.
#2. 이진탐색 활용
따라서 O(logN)의 시간복잡도를 가지는 이진탐색을 활용해야 런타임 에러가 발생하지 않는다.
데이터 입력

함수 선언 및 결과 출력

> 다른 사람의 풀이
처음 #1에서 생각한 아이디어를 런타임 에러가 안나도록 구현할 수 있는 코드이다. 시간도 1/3배로 줄일 수 있다.
open으로 시스템에서 직접 입력을 받아 타겟 넘버가 A리스트에 있는지 확인하고, 있으면 True값을 1로 없으면 False값을 0으로 출력하도록 했다.

'python > 알고리즘 문제풀이' 카테고리의 다른 글
최소신장트리, 크루스칼 알고리즘 (1) | 2021.07.16 |
---|---|
[백준 | 파이썬3] 9184 신나는 함수실행- 동적계획법 (0) | 2021.07.16 |
서로소 집합 알고리즘(3)/ 사이클 판별 (0) | 2021.07.14 |
서로소 집합 알고리즘(2)/ 경로압축기법 (0) | 2021.07.14 |
서로소집합 알고리즘(1) (0) | 2021.07.14 |