Coding Test/programmers
[Python] 파이썬 프로그래머스 호텔 대실
파송송
2023. 2. 8. 22:27
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/155651
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
check in은 +1 chec out은 -1이라고 하면 check in list와 check out list를 tuple을 통해 in인지 out인지 판별한다.
여기서 list를 합칠 때
check out list를 앞에 두고 합쳐야한다. 같은 수 정렬은 먼저 들어온 변수가 앞으로 가기 때문이다.
check in을 앞에 둔다면 10:10 check in 10:10 check out으로 꼬여 새로운 방을 내어주게 된다.
def time_convert(string) :
h, m = map(int, string.split(":"))
return h*60 + m
def solution(book_time):
s_list = [ (time_convert(s),1) for s,e in book_time]
e_list = [ (time_convert(e)+10,-1) for s,e in book_time]
book_list = sorted((e_list+s_list), key=lambda x:x[0])
answer = 0
book = 0
for t, c in book_list:
book += c
answer = max(answer, book)
return answer
다른 사람의 풀이
time table을 하나씩 구현하고 1씩 더한 풀이도 있었다.
def solution(book_time):
time_table = [0 for _ in range(60 * 24)]
for start, end in book_time:
start_minutes = 60 * int(start[:2]) + int(start[3:])
end_minutes = 60 * int(end[:2]) + int(end[3:]) + 10
if end_minutes > 60 * 24 - 1:
end_minutes = 60 * 24 - 1
for i in range(start_minutes, end_minutes):
time_table[i] += 1
return max(time_table)
728x90