[백준 1931] 회의실 배정

Junyoung Park·2022년 4월 21일
0

코딩테스트

목록 보기
384/631
post-thumbnail

1. 문제 설명

회의실 배정

2. 문제 분석

정렬 이후 그리디 알고리즘을 통해 할당 가능한 회의실을 체크하고, 현재 진행 중인 회의가 끝나는 시간과 바로 다음 들어오는 회의 시작 시작을 비교하자.

  • 파이썬의 람다 함수 정렬 방법을 몰라 문제 제출 88% 쯤에서 틀렸다는 메시지를 받았다. 정렬 조건을 추가(처음에는 자동으로 튜플 두 번째 값이 작다가 첫 번째 조건이면 튜플 첫 번째 값이 오름차순으로 정렬되는 줄 알았다)하는 방법을 검색한 이후 풀 수 있었다.

3. 나의 풀이

import Foundation

let N = Int(readLine()!)!
var meetings = [(Int, Int)]()
for _ in 0..<N{
    let input = readLine()!.split(separator: " ").map{Int(String($0))!}
    let (start, end) = (input[0], input[1])
    meetings.append((start, end))
}
meetings.sort { (a: (Int,Int), b :(Int,Int)) -> Bool in
    if a.1 == b.1 { return a.0 < b.0
    } else { return a.1 < b.1 } }
var curStart = -1
var curEnd = -1
var cnt = 0
for curMeeting in meetings{
    let (start, end) = (curMeeting.0, curMeeting.1)
    if curEnd <= start{
        curEnd = end
        cnt += 1
//      다음 회의가 시작하는 시간보다 현재 진행 중 회의가 빨리 끝난다면 시작 가능
//      다음 회의가 끝나는 시간 keep
    }
}

print(cnt)
profile
JUST DO IT

0개의 댓글