binary search 7

[Python] 1939. 중량제한

문제 https://www.acmicpc.net/problem/1939 1939번: 중량제한 첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 www.acmicpc.net 풀이 과정 한 번의 이동에서 옮길 수 있는 물품들의 중량의 최댓값을 구해야 하므로, 공장 두 곳을 이은 다리들 중 중량 제한이 더 큰 다리를 건너는 것이 좋다. 따라서 입력받은 다리 정보들을 다리의 중량 제한을 기준으로 하여 내림차순으로 정렬하고, 다익스트라를 사용하되 힙에 push 할 때, 중량을 마이너스를 붙여 push 하여 최대..

Algorithm/Baekjoon 2022.11.03

[Python] 2805. 나무 자르기

n, m = map(int, input().split()) # 나무의 수 n, 나무의 길이 m tree_h = list(map(int, input().split()) # 나무의 높이 s, e = 1, max(tree_h) # 시작 높이, 끝 높이 while s = mid: # mid보다 큰 나무라면 자르기 temp += tree - mid # temp == m: break 하면 안됨. 절단기의 높이를 더 높일 수 있기 때문 if temp >= m: # 목표 나무 길이보다 크다면 절단기 높이기 s = mid + 1 else: # 목표 나무 길이보다 작다면 절단기 낮추기 e = mid - 1 print(e)

Algorithm/Baekjoon 2021.12.16

[Python] 2776. 암기왕

def binary_search(t_num): s = 0 # 시작, 마지막 포인트 초기화 e = n1 - 1 while s t_num: # 중간지점 값이 목표 숫자보다 크다면 e = m - 1 # 시작 ~ 중간 범위 설정 else: # 중간지점 값이 목표 숫자보다 작다면 s = m + 1 # 중간 ~ 끝 범위 설정 return 0 # 수첩 1에 숫자 없는 경우 tc = int(input()) for _ in range(tc): n1 = int(input()) # 수첩 1에 적어놓은 정수의 개수 number1 = sorted(set(map(int, input().split()))) # 수첩 1에 적힌 숫자들 n1 = len(number1) n2 = int(input()) # 수첩 2에 적어놓은 정수의 개수..

Algorithm/Baekjoon 2021.10.20

[Python] 5207. 이진탐색

for idx in range(1, int(input())+1): n, m = map(int, input().split()) a = sorted(list(map(int, input().split()))) # 리스트 a 정렬 b = list(map(int, input().split())) # 체크할 숫자들이 들어가있는 리스트 b answer = 0 for t_n in b: # t_n : target number s = 0 # 시작 인덱스 e = n - 1 # 마지막 인덱스 switch = None # 이전에 탐방한 구간이 어딘지 while s t_n and switch != 'l': # t_n이 중간 지점 숫자보다 작고, 이전 방향 왼쪽 아니었다면 e = mid - 1 # 다음은 왼쪽 구간 탐방 하도록 s..