프로그래머스_1일차(lv2)

김현두·2023년 7월 26일
post-thumbnail

파이썬 LV2 호텔 대실 문제

작성 코드

참조 (https://school.programmers.co.kr/questions/48113)

def solution(book_time):
    # 시간을 "분"으로 변환
    for i in range(len(book_time)):   #book_time 배열의 길이만큼 반복
    
    #배열의 구조는 (['00:00','00:00'],['00:00','00:00'] 으로 이루어 져있는데)
    #반복문을 돌때 나오는 원소는 ['00:00','00:00']이다
    #이를 필요한 숫자만 분으로 바꿔서 배열에 삽입 할 것이다.
    #주어진 배열이 ['a:b', 'c:d']이면
    # 첫번째 원소인 [a:b]를  : 문자를 기준으로 sh ,sm변수에 초기화 한다.
    
        sh, sm = book_time[i][0].split(':')  
                
        eh, em = book_time[i][1].split(':')
    # 정수형으로 전환(a*60) + 정수형으로 전환(b), 정수형으로 전환(c*60) + 정수형으로 전환(d)+청소시간10분, 
    #밑의 라인이 실행되면 모든 배열은 청소시간 10분을 포함한 시간을 분으로 변환한 배열이 완성된다.
        book_time[i] = [int(sh)*60 + int(sm), int(eh)*60 + int(em) + 10]
        

    # 각 "분"에 해당하는 "분"구간 카운팅해서 리턴
    overbooked = 0             #전체 필요한 방개수을 저장하기 위한 변수
    for i in range(24*60):     #24시간 *60분 하루 전체를 의미
        cnt = 0                #방이 필요한 수를 카운팅하기위한 변수 & 초기화(시간별로 방이 몇개 필요한지 카운트 하기 때문에 
                                #시간이 지나면 초기화 해줘야 된다.)
        for bt in book_time:   #예약날짜를 분으로 변환한 배열 안에서 원소들을 가져와 반복문으로 출력
            bs, be = bt        # 배열안에 원소는 00,00으로 되어있는데 시작시간을 bs 종료시간을 be로 저장
            if bs <= i < be:   #하루 전체를 반복하며 방이 필요한 조건 (예약시간_book_time 시간 충족)을 의미 
                cnt += 1       # 방이 필요한 수를 +1하여 저장
                if cnt > overbooked: #필요한 방의 수가 전체 필요한 방을  초과할때를 저장
                    overbooked = cnt #전체 필요한방 개수  갱신

    return overbooked #전체 필요한 방 개수 리턴

아직 실력이 없어서 먼저 작성한 프로그래머의 코드를 참고하고하여 디버그 하는 방법으로 진행하였다.

하루 24시간을 분으로 변환하고 주어진 시간을 전부 분으로 치환하여 중복된 방을 리턴하는 방식은 정말 효율적이고 아름 답게 보였다.


코드 리뷰를 하기위해 TOOL은 파이참을 사용했다.

profile
슈뢰딩거의 체셔

2개의 댓글

comment-user-thumbnail
2023년 7월 26일

이런 유용한 정보를 나눠주셔서 감사합니다.

1개의 답글