본문 바로가기
Algorithm/문제풀이_백준

[Swift][투 포인터] 백준 2230번 (수 고르기)

by Joahnee 2022. 5. 20.

요구능력

투 포인터, 정렬

 

문제풀이

포인터가 가리키고있는 위치의 값끼리 차를 구하면된다.

중요한점은 정렬을 해주지 않으면 투포인터가 성립되지 않는다.

그리고 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..<n{
    arr.append(Int(String(readLine()!))!)
}
arr.sort()

var diff = 0
var result = Int.max
var end = 0

for start in 0..<n{
    while end < n{
        diff = abs(arr[start] - arr[end])
        if diff >= m {
            result = min(result, diff)
            break
        }
        if diff < m {
            end += 1
        }
    }
}
print(result)

댓글