문제

지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.

각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.

내가 푼 풀이

- 주어진 크레인과 박스를 배열로 입력한다.

- 크레인의 무게 한도가 높은 크레인을 우선으로 무게가 높은 박스를 옮긴다.

- 크레인의 무게 한도보다 높은 무게의 박스가 있는 경우 옮길 수 없다.

 

import Foundation

let count = Int(readLine()!)!
var crain = readLine()!.split(separator: " ").map{ Int($0)! }
let boxCount = Int(readLine()!)!
var box = readLine()!.split(separator: " ").map{ Int($0)! }
var time = 0

// 크레인과 박스 내림차순
crain.sort{ $0 > $1}
box.sort{ $0 > $1}

// 크레인중에 박스의 무게보다 무게제한이 낮은 크레인은 지운다.
while !crain.isEmpty && crain[crain.endIndex - 1] < box[box.endIndex - 1] {
    crain.removeLast()
}

// 옮길수 없다면 -1
// 크레인의 무게제한이 큰것부터 무게가 많이나가는 박스를 우선으로 옮겨준다.
if crain.count == 0 || crain[0] < box[0] {
    print(-1)
} else {
    while !box.isEmpty {
        var c = crain
        for i in 0..<crain.count {
            var idx = 0
            while idx < box.count && crain[i] < box[idx] {
                idx += 1
            }
            if idx < box.count {
                box.remove(at: idx)
            }
        }
        time += 1
    }
    print(time)
}

'코딩테스트 > 백준' 카테고리의 다른 글

BOJ-1005 ACM Craft Swift  (1) 2023.06.06
BOJ-4963 섬의 개수 Swift  (0) 2023.06.05
BOJ-1309 동물원 Swift  (0) 2023.06.05
BOJ-7569 토마토 Swift  (0) 2023.06.05
BOJ-18310 안테나 Swift  (0) 2023.06.04

+ Recent posts