Closed
Description
💬 문제
[코딩테스트 연습 - 호텔 대실](https://school.programmers.co.kr/learn/courses/30/lessons/155651)
💬 Idea
- 예약 타임을 Int로 형변환해준다
- 15:00 → 1500
- 퇴실 시간에 청소시간 10분을 합쳐준다.
- 이 때 퇴실 시간이 50분을 넘겼을 때를 유의해야 한다. (테스트케이스 9,17번 주의)
- 퇴실 시간이 55분일 때 10분을 더해주게 되면 → 65분이 되므로
- 청소시간을 합친 분 시간이 60분을 넘는다면 40을 더해줘야 한다.
- bookList를 돌며 이미 배정된 룸들을 같이 돌아주며 퇴실시간보다 입실 시간이 늦거나, 입실 시간보다 퇴실 시간이 빠른 경우 해당 룸에 예약 리스트를 추가한다.
- 이 때 손님이 아무 방도 배정받지 못한다면 (이미 해당 시간에 예약이 찼다면) 객실을 하나 추가해준다.
💬 풀이
func solution(book_time:[[String]]) -> Int {
var bookList: [(Int, Int)] = []
// Int로 시간변환
for b in book_time {
let t1 = Int(b[0].components(separatedBy: ":").map{ String($0) }.joined())!
var t2 = Int(b[1].components(separatedBy: ":").map{ String($0) }.joined())! + 10
// 청소시간을 합친 분 시간이 60분을 넘는다면
if t2 % 100 >= 60 {
// 40을 더해준다
t2 += 40
}
bookList.append((t1, t2))
}
// 퇴실 시간이 큰 순서대로 정렬
bookList = bookList.sorted(by: { $0.1 > $1.1 })
var assignRoomList: [[(Int, Int)]] = [[bookList.first!]]
for b in 1..<bookList.count {
var isBooked = false
for (i, r) in assignRoomList.enumerated() {
// 퇴실시간보다 입실 시간이 늦거나, 입실 시간보다 퇴실 시간이 빠른 경우
if bookList[b].0 >= r.last!.1 || r.last!.0 >= bookList[b].1 {
// 해당 룸에 예약 리스트를 추가한다
assignRoomList[i].append(bookList[b])
isBooked = true
break
}
}
// 예약되지 않았다면
if !isBooked {
// 새로운 방을 배정한다
assignRoomList.append([bookList[b]])
}
}
return assignRoomList.count
}