이분탐색(3)
-
[BOJ_Python] 2110.공유기 설치
문제https://www.acmicpc.net/problem/2110 사용 알고리즘이분탐색 풀이고려사항1. 가장 인접한 거리 확인하기 후기1. 이 문제의 keypoint는 이미 설치 후 거리를 확인하는 것이 아니라,거리를 먼저 설정하고 그 거리보다 멀리 몇 개의 공유기가 설치 될 수 있는지를 확인하는 것이다.먼저 공유기를 설치 후 진행하게 되면 확인 해야 할 범위가 큰 경우 시간초과가 발생한다.때문에 이분탐색을 통해 거리를 먼저 설정 후 공유기 설치 가능 갯수를 확인하며거리의 범위를 조절해 가는 것이 효율적이다.2. 이때 최대한 최적화를 시키기 위해 end의 범위도 변경해주었다.원래는 max값을 기준으로 설정하여 진행하지만,여기서의 max 값은 마지막 집이 아니라 마지막 집에서 첫 집의 거리를 뺀 총 거..
2024.11.22 -
[BOJ_Python] 1654. 랜선 자르기
문제https://www.acmicpc.net/problem/1654 사용 알고리즘이분탐색 풀이고려사항1. N개 이상을 만들 수 있는 '최대' 길이인지 후기1. 이분탐색의 기본 유형이다.이분 탐색을 통해 랜선을 자를 길이를 계속 좁혀가며 탐색한다.- 가능한 랜선의 길이는 1 ~ ($2^{31}$ - 1)으로 단순 모든 길이를 확인하면 약 $2^{31}$ 번 연산이 필요하다.- 이진 탐색의 경우 $log_{2} {(max cable)}$으로 설정 후 K만큼 랜선 갯수 연산을 진행한다. 따라서 시간 복잡도는 $O(K log_{2} {(max cable)}) $로 효율적이다. 코드흐름1. 기준 길이를 통해 N개 이상의 랜선이 만들어 질 수 있는지 확인한다.- N개 이상이 가능하다면, 기준 길이를 높인다.- ..
2024.11.21 -
[BOJ_Python] 1920. 수 찾기
문제https://www.acmicpc.net/problem/1920 사용 알고리즘이분탐색, 해시 맵https://www.acmicpc.net/blog/view/109 풀이고려사항1. target의 존재 여부 - 이분 탐색으로 정렬 리스트 탐색을 통한 찾기 - 해시 맵의 키를 통한 찾기 후기1. 이 문제의 keypoint는 조건의 수 범위가 크다는 것이다.리스트에 들어올 수 있는 정수의 범위는 -2^31보다 크거나 같고 2^31보다 작다.N과 M 역시 100,000으로 크기가 크기 때문에 하나하나 탐색하는 것은 시간 초과가 발생한다. 2. 이 문제를 두가지 방식으로 풀이했다.2-1. 이분 탐색을 통한 풀이인덱스를 기준으로 left와 right를 설정하고그 가운데 값으로 기준을 삼아 이분탐색을 진행한다.이..
2024.11.20