[Baekjoon] 백준 2828 사과 담기 게임
문제
스크린 위에서 사과 여러개가 떨어질 때 바구니로 사과를 담기 위한 이동거리의 최솟값을 구하라
풀이
시작지점을 left와 right를 방정식으로 나타낼 수 있다.
left = 1
right = left + m - 1
/*
5 1
3
1
5
3
*/
let input = readLine()!.split(separator: " ").map { Int($0)! }
let n = input[0] // screen
let m = input[1] // basket
let j = Int(readLine()!)! // count
var left = 1
var right = left + m - 1 // 그냉 m으로 해도 된다
var totalMove = 0
for _ in 0..<j {
// 사과가 떨어지는 위치
let pos = Int(readLine()!)!
// 사과의 위치가 이미 바구니가 있는 위치이면 아래 바구니 이동 로직을 무시
if pos >= left && pos <= right { continue }
// 포지션이 바구니 안에 있으면 이동 안함
if pos < left {
let move = left - pos
left -= move
right -= move
totalMove += move
} else if pos > right {
let move = pos - right
right += move
left += move
totalMove += move
}
}
print(totalMove)
Leave a comment