본문 바로가기

백준177

[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.
[Swift][투 포인터] 백준 2230번 (수 고르기) 요구능력 투 포인터, 정렬 문제풀이 포인터가 가리키고있는 위치의 값끼리 차를 구하면된다. 중요한점은 정렬을 해주지 않으면 투포인터가 성립되지 않는다. 그리고 diff >= m이 되면 우리는 최소의 차이를 구하는 것이므로 정렬되어있기 때문에 뒤로갈수록 차이는 더 커져서 볼 필요없이 break해줬다. 후기 투포인터의 응용(?)문제 코드 let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] var arr = [Int]() for _ in 0.. 2022. 5. 20.