백준 - 22988 재활용 캠페인 - Swift

AekT·2021년 11월 17일
0
post-thumbnail

백준 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)
profile
으악

0개의 댓글