본문 바로가기

개발/알고리즘

[백준] 그리디 - 1931번 회의실 배정

반응형
 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

입력 & 출력

각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고,
각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자.

풀이

회의 시간은 쌓여간다.
회의 시간이 종료되는 시간 순으로 회의 시간들을 정렬한다.
만약 종료되는 시간이 같을 경우, 회의가 먼저 시작하는 순으로 정렬한다.
시작하는 순으로 정렬하는 이유는, 회의의 시작 시간이  현재 시간보다 적을 경우 스킵해야하기 때문이다.

 

Swift 전체 코드

let n = Int(readLine()!)!
var meetings : [(Int, Int)] = []
var (max, count) = (0, 0)

for _ in 0..<n {
    let input = readLine()!.split(separator: " ").map { Int($0)! }
    meetings.append((input.first!, input.last!))
}

meetings.sort { return $0.1 == $1.1 ? $0.0 < $1.0 : $0.1 < $1.1}

for i in meetings {
    if max <= i.0 {
        count += 1
        max = i.1
    }
}

print(count)
반응형