[백준] 2110번 공유기 설치 - 파이썬
·
알고리즘 공부/이진탐색
https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net - 입력 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000) 공유기의 개수 C (2 ≤ C ≤ N) 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 한 줄에 하나씩 주어진다. - 출력 첫째 줄에 가장 인접한 두 공유기 사이의 최대 거리를 출력한다. import sys from collect..
[백준] 2805번 나무 자르기 - 파이썬
·
알고리즘 공부/이진탐색
https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 전형적인 이분 탐색 문제이지만 약간 문제를 읽어보면 다르다는걸 알수 있다. ' 적어도 M미터의 나무를 집에 가져가기 위해서 절단기에 설정할 수 있는 높이의 최댓값을 출력한다. ' 최댓값을 뽑아내기 위해서 result라는 값을 만들었다. import sys n, m = map(int,sys.stdin.readline().split()) tree = list(m..
[백준] 12015번 가장 긴 증가하는 부분 수열 2 - 파이썬
·
알고리즘 공부/이진탐색
https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net import sys n = int(sys.stdin.readline()) num_list = list(map(int,sys.stdin.readline().split())) lis = [0] for num in num_list: # lis 마지막 값보다 현재 num 값이 크다면 그냥 lis에 넣는다. 왜냐 최장 증가 수열이니까 큰값이면 우선 넣음 if lis[-1] < num: lis.append(..
[백준] 10815번 숫자 카드 - 파이썬
·
알고리즘 공부/이진탐색
https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 문제를 보고 엥? 너무 쉬운데 하고 풀었는데 import sys n = int(sys.stdin.readline()) a = list(map(int, sys.stdin.readline().split())) m = int(sys.stdin.readline()) b = list(map(int, sys.stdin.readline().split())) for i in ran..
[백준] 1197번 랜선 자르기 - 파이썬
·
알고리즘 공부/이진탐색
https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net import sys k,n = map(int, sys.stdin.readline().split()) lan = [] for i in range(k): lan.append(int(sys.stdin.readline())) lan.sort() start = 1 end = lan[-1] while start = n: start = mid + 1 else: end = mid -..
이진 탐색 알고리즘
·
알고리즘 공부/이진탐색
이진 탐색은? (Binary Search) 1. 이진 탐색은 배열 내부의 데이터가 정렬되어 있어야한 사용할 수 있는 알고리즘이다. 2. 이진탐색은 위치를 나타내는 변수 3개를 사용하는데 탐색하고자 하는 범위의 시작점, 끝점, 그리고 중간점이다. 3. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는게 이진 탐색 과정이다. 재귀로 이진탐색 #이진 탐색 소스코드 구현(재귀 함수) def binary_search(array, target, start, end): if start >end: return None mid = (start + end)//2 # 중간이 타겟인 경우 if array[mid] == target: return mid # 중간보다 타겟값이 작은 경우 el..
[백준] 10816번 숫자 카드 2 - 파이썬
·
알고리즘 공부/이진탐색
https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net from bisect import bisect_left,bisect_right n = int(input()) num_1 = sorted(list(map(int,input().split()))) m = int(input()) num_2 = list(map(int,input().split())) answer =[0]*m def search(array1,array2):..
[백준] 1920번 수 찾기 - 파이썬
·
알고리즘 공부/이진탐색
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 n = int(input()) num_1 = sorted(list(map(int,input().split()))) m = int(input()) num_2 = list(map(int, input().split())) def search(array,target,start,end): if start>end: return print(0) mid = (st..