본문 바로가기

이분탐색6

[Swift][이분탐색] 백준 1300번 (K번째 수) 요구능력 이분탐색(lowerBound), 수학(곱하기성질) 문제풀이 정성들여서 정리해주신분의 글을 참고하였습니다. 위 분의 글로 이해하고 swift로 푸시는 분들은 제 코드를 보셔도 괜찮을 것 같습니다. 후기 어렵다 코드 let n = Int(String(readLine()!))! let k = Int(String(readLine()!))! var start = 1 var end = n * n while start = k{//lowerBound를 해줘야 정확히 해당인덱스에 관한 수를 가져옴. mid가 다른데, count가 같은게 여러개가 있을 수도있음. //예를 들어서, mid = 4일때 count가 5이고 mid가 5일때도 count가 5이면 upperBound를 써버리면 6을 출력함. end = mi.. 2022. 5. 24.
[Swift][이분 탐색] 백준 2110번 (공유기 설치) 요구능력 이분탐색(upperBound) 문제풀이 mid의 경우 공유기가 들어갈 수 있는 집사이의 간격으로 기준을 잡았다. 집들의 거리가 저장된 배열을 가지고 집들끼리의 거리를 비교해서 인접한집끼리 거리가 mid보다 크거나 같을경우 공유기 설치가 가능하다. 후기 이분탐색은 기준을 잘 세우자.. 코드 import Foundation let nc = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nc[0] let c = nc[1] var arr = [Int]() for _ in 0.. 2022. 5. 24.
[Swift][이분탐색] 백준 2805번 (나무 자르기) 요구능력 이분탐색(upperBound) 문제풀이 이전에 풀었던 랜선자르기와 문제유형이 완전 동일하다. 가져갈 수 있는 나무의 크기를 구하기위해 sum으로 관리해줬다. 자를 수 없는 나무의 경우 mid(톱의 높이)보다 낮은 나무들이기 때문에 i - mid < 0일 경우 continue로 건너뛰었다. 후기 카테고리를 모르고있으면 이문제가 이분탐색인지 어떻게알지😂 코드 import Foundation let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] let arr = readLine()!.split(separator: " ").map{Int(String($0))!} let maxArr = arr.. 2022. 5. 24.
[Swift][이분탐색] 백준 1654번 (랜선 자르기) 요구능력 이분탐색 문제풀이 N개의 랜선을 만들 수 있을 때, 그 중에서 최대 랜선의 길이를 구해야한다. K개의 랜선이 주어졌다. K개의 랜선의 길이를 적절하게 잘라서 N개의 랜선을 만듦과 동시에 최대 랜선의 길이를 구하는 문제이다. N개의 랜선이 만들어지는지는 이분탐색을 통해서 구하자. 우리는 N개의 랜선을 만들기 위해 "자를 수 있는 길이"를 알아야한다. 작게는 1 단위로 자를 수 있을 것이고 크게는 가장 긴 것 만큼 자를 수 있을 것이다. 그래서 start = 1, end = 입력받은 k중에 가장큰값을 사용했다. 이 길이를 기준으로 이분탐색을 해보자. 중간에 있는 이 부분이 n개인지 아닌지를 구하는 부분이다. for i in 0.. 2022. 5. 23.