소프티어 level 2 문제
https://softeer.ai/practice/info.do?idx=1&eid=626
처음에 회의실 딕셔너리로 값을 [9,10,11, ..., 17] 로 초기화하고 회의실이 예약된 시간을 remove 해서 사용가능한 시간들만 리스트로 값을 만들었었는데 [9,10,12,13,...] 이 있으면 어떻게 중간에 11이 비어 있으면 [9,10]을 묶을 지 생각하다가 모르겠어서 해설을 봤다.
https://softeer.ai/class/algotutor/detail.do?id=78
해설에서는 인덱스 9부터 18까지 0으로 초기화 한 리스트를 만들고 예약된 시간을 1로 바꾸어 처리하는 로직을 사용했다
나중에 다시 다음과 같이 짰더니 마지막에 구분선을 넣는데 문제가 있었다.
# M개의 회의에 대한 정보가 주어지면
# 회의실별로 비어 있는 시간대를 정리해 출력하는 프로그램
# N개의 회의실이 있다. 방이름들은 알파벳 소문자
n, m = map(int,input().split()) # n개의 회의실, m개의 예약된 회의
rooms = {}
for _ in range(n):
    room = input() # 회의실 이름 입력
    rooms[room] = [0]*18+[1]   # 예약시간 초기화
    
for i in range(m):
    r, s, t = input().split() # 회의실이름, 시작시각, 종료시각 입력
    s = int(s)
    t = int(t)
    for i in range(s,t):
        rooms[r][i] = 1
# 회의실 이름 오름차순으로 회의실 정보 출력
rooms = dict(sorted(rooms.items()))
for room in rooms:
    print(f'Room {room}:')
    times = []
    current = 1
    for i in range(9,19):
        if current == 1 and rooms[room][i]==0:
            start = i
            current = 0
        elif current == 0 and rooms[room][i] == 1:
            end = i
            current = 1
            times.append([start,end])
    # if current == 0:
    #     times.append([start,18])
    if len(times) == 0:
        print('Not available')
    else:
        print(f'{len(times)} available:')
        for x in times:
            print(f'{x[0]:02d}-{x[1]}')
    
    # 구분선
    print('-----')
for room in rooms:
이 방식으로 for문을 돌리니 현재 돌고 있는것이 마지막인지, 즉 다음 for문이 있는지 확인할 수가 없어서 마지막 for 문에는 구분선을 넣지 않는 처리를 할 수 없었다.
그런데 enumerate를 이용해 index를 얻어서 이를 해결할 수 있었다.
for index, room in enumerate(rooms):
    print(f'Room {room}:')
    times = []
    current = 1
    for i in range(9,19):
        if current == 1 and rooms[room][i]==0:
            start = i
            current = 0
        elif current == 0 and rooms[room][i] == 1:
            end = i
            current = 1
            times.append([start,end])
    # if current == 0:
    #     times.append([start,18])
    if len(times) == 0:
        print('Not available')
    else:
        print(f'{len(times)} available:')
        for x in times:
            print(f'{x[0]:02d}-{x[1]}')
    
    # 구분선
    if index != len(rooms)-1:
        print('-----')
완전 섹시하다
알게된 것