[소프티어 Lv2] [21년 재직자 대회 예선] 회의실 예약
https://softeer.ai/practice/6266
[내 풀이]
- 단순 구현 문제, 문자열 포맷
- 연속된 0 구간 반환하는 것 더 간결하게 표현할 수 있는 방법은 없을까?
import sys
# 입력
n, m = map(int,input().split())
rooms = dict()
for i in range(n):
rooms[input()] = [0,0,0,0,0,0,0,0,0]
for i in range(m):
room, s, e = input().split()
s, e = int(s)-9, int(e)-9
for j in range(s, e):
rooms[room][s:e] = [1]*(e-s) #이렇게 중간 값 바꿔치기 할 수 있다
# 딕셔너리 키 기준 정렬 : 리스트로 정렬된 것을 다시 딕셔너리로
rooms = dict(sorted(rooms.items()))
# 출력
for k, v in rooms.items():
print('Room %s:' %k)
if 0 not in v:
print('Not available')
else:
i = 0
s = 0
e = 0
temp = []
while True:
while i<9 and v[i] != 0:
i += 1
if i==9:
break
s = i
while i<9 and v[i] != 1:
i += 1
e = i
temp.append((s+9, e+9))
if i == 9:
break
print('%d available:' %len(temp))
for s, e in temp:
print('{0:02d}'.format(s)+'-'+'{0:02d}'.format(e))
if k != list(rooms.keys())[-1]:
print('-----')
중요 포인트
- 리스트의 중간 값을 이렇게 바꿔치기 할 수 있다.
rooms[room][s:e] = [1]*(e-s)
- 딕셔너리 키 기준 정렬 : 우선 sorted() 한 후, 딕셔너리가 리스트로 정렬되어 반환된 것을 다시 딕셔너리로
- print('{0:02d}'.format(s)+'-'+'{0:02d}'.format(e)) : 숫자 자릿수 달라질 때 0채워 반환하기
[대표 풀이]
- f'Room {변수}' 과 같이 표현할 수도 있구나.
- f'{x[0]:02d}-{x[1]}' : 글자수 0으로 채우기
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('-----')
'알고리즘 문제풀이 > 소프티어' 카테고리의 다른 글
[소프티어 Lv3] 스마트 물류(구현) (0) | 2023.11.02 |
---|---|
[소프티어 Lv2] 지도 자동 구축(DP) (0) | 2023.11.02 |
[소프티어 Lv3] [HSAT 7회 정기 코딩 인증평가 기출] 순서대로 방문하기(DFS) (0) | 2023.11.02 |
[소프티어 Lv3] 8단 변속기 (0) | 2023.11.02 |
[소프티어 Lv3] 택배 마스터 광우(완전탐색) (1) | 2023.11.02 |
댓글