728x90
반응형

Algorithm/Binary Search 7

[Baekjoon 1654 / Python / 실버2] 랜선 자르기

이분 탐색 문제이다. 늘 결과 도출 부분에서 묘하게 헷갈린다. # 실버2 -> 이분 탐색"""K : 이미 가지고 있는 랜선의 개수N : 만들어야 할 랜선의 개수data[] : K개 랜선 리스트start : 1 -> 랜선 최소 길이end : max(data) -> 랜선 최대 길이- 랜선 길이를 기준으로 이분 탐색 실시- 반복할 때 마다 조건 검사    -> 해당 길이로 N개 랜선 제작이 가능한지    -> 모든 랜선을 일일이 길이로 나눠 총 랜선 개수 세기- 최대값을 찾아야 하므로 end 출력"""import sysinput = sys.stdin.readlineK, N = map(int, input().split())data = [int(input()) for _ in range(K)]start = 1en..

[Baekjoon 3079 / Python / 골드5] 입국심사

이분 탐색 문제이다. 일반적인 이분 탐색의 틀에서 크게 벗어나지 않는다.다만 start와 end의 초기 설정 및 mid값의 유효성을 어떻게 판단할지에 대해서 고민이 좀 필요했다.  # 이분 탐색import sysinput = sys.stdin.readlineN, M = map(int, input().split())test = [int(input()) for _ in range(N)]# 이분 탐색def binarySearch():    start = min(test)    end = max(test) * M    result = end    while start end:        mid = (start + end) // 2        total = 0        # 임의의 시간(mid) 동안 몇명..

[Baekjoon 2110 / Python / 골드4] 공유기 설치

import sysinput = sys.stdin.readline# 집, 공유기 개수N, C = map(int, input().split())house = [int(input()) for _ in range(N)]  # 집 좌표house.sort() # 집을 순서대로 정렬# 이분 탐색으로 인접 공유기 간의 최소 거리를 찾는다def binarySearch():    end = house[-1] - house[0] # 최대 거리    if C == 2:        return end    start = 1 # 최소 거리    result = 0 # 결과를 저장할 변수    # 최적의 거리를 찾을 때까지 반복한다    while start end:        cur = house[0] # 마지막으로 공유..

[Baekjoon 2805 / python / 실버2] 나무 자르기

import sys n, m = map(int, sys.stdin.readline().split()) # 나무의 수 / 요구 벌목량 tree = list(map(int, sys.stdin.readline().split())) # 나무 리스트 tree.sort(reverse=True) # 내림차순 정렬 (큰 나무부터) result = 0 # 이분 탐색으로 적절한 "높이"를 탐색한다 start = 1 # 최소 높이 end = max(tree) # 최대 높이 while start while문이 끝나면, 반드시 start가 end보다 1 크다 mid = (start + end) // 2 cutTree = 0 for i in tree: # 높이(mid)를 설정하고 일일이 벌목을 해본다 if i > mid: # 나..

[Baekjoon/JAVA] 백준 10815번 숫자 카드

주어지는 숫자의 범위가 매우 크기 때문에, 일일이 비교하는 방법보다는 이분 탐색 알고리즘을 이용해야 합니다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); StringTokenizer st; int n = Integer.parseInt(br.readLine()); int cards[] = new int[n]; st = new StringTok..

728x90
반응형