백준 22988 재활용 캠페인
문제 : https://www.acmicpc.net/problem/22988
입력된 수들을 정렬시키고 현재 있는 X의 수를 구한다.
start를 0, end 를 전체크기 - X의 수 로 두고 input[start] + input[end]가 X/2보다 크다면 각각 +1, -1, 남은 전체 개수를 -2해준다. 아니라면 start에 +1만 해준다.
start 가 end보다 크거나 같을때 까지 진행한다.
두 개의 용기를 받으면 추가로 X/2 만큼 준다고 하니 3개가 있다면 무조건 한 개 이상의 꽉 찬 용기를 만들 수 있다.
Code :
let n = readLine()!.split(separator: " ").map{Int($0)!}
let X = n[1]
var input = readLine()!.split(separator: " ").map{Int($0)!}.sorted()
var res = 0
var start = 0
var end = input.count-1
var count = input.count
while start <= end{
if input[end] != X{ break }
res += 1
end -= 1
count -= 1
}
while start < end{
if input[start] + input[end] >= X/2{
res += 1
start += 1
end -= 1
count -= 2
}else{
start += 1
}
}
print(res + count/3)