목록이진탐색 (6)
하루일문
문제 https://www.acmicpc.net/problem/12738 12738번: 가장 긴 증가하는 부분 수열 3 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net 코드 from bisect import bisect_left import sys input = sys.stdin.readline n = int(input()) li = list(map(int, input().split())) # 수열을 저장하는 리스트 li_2 = [-1000000001] for i in li: # For문에서 li 순서대로 li_2에 가장 최근..
문제 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 코드 n = int(input()) n_li = sorted(list(map(int, input().split()))) m = int(input()) m_li = list(map(int, input().split())) for i in m_li: start, end = 0, n-1 while True: mid = (start + end) // 2 if n_li[mid] == i: print(1) break i..
문제 2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) tax = list(map(int, input().split())) limit = int(input()) start, end = 0, max(tax) while start = total_tax: start = mid + 1 # 예산보다 작을경우 end를 줄여서 mid값을 줄여준다. else: end = mid -1 print(end)
문제 2776번: 암기왕 연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, www.acmicpc.net 코드 for t in range(int(input())): # 오늘 본 숫자를 입력받고 이진탐색으로 풀기 위해 오름차순 정렬해준다 see_n = int(input()) see = sorted(list(map(int, input().split()))) write_n = int(input()) write = list(map(int, input().split())) # 적은 숫자만큼 반복한다 for n in write: # 시작과 끝을 정해준다 start, end =..
문제 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 코드 import sys input = sys.stdin.readline k, n = map(int, input().split()) li = [] for i in range(k): li.append(int(input())) # long이 최대 길이는 max(li) short, long = 1, max(li) # short가 long보다 길어지면 멈춰 while short = n: short = cut + 1 # 개수보다 적다면 ..
문제 13777번: Hunt The Rabbit For each line of input, output the numbers of all envelopes opened, in the order they were opened, until the rabbit is found. Each number must be on the same line separated by a space from the previous number. www.acmicpc.net 코드 while True: start, end = 1, 50 N = int(input()) # N이 0이면 반복을 끝낸다 if N == 0: break while True: # start와 end의 중간을 구한다 n = (start + end) // 2 # 중..