알고리즘 문제풀이/소프티어
[소프티어 Lv2] [21년 재직자 대회 예선] 회의실 예약(문자열 포맷)
summer_light
2023. 11. 2. 14:12
[소프티어 Lv2] [21년 재직자 대회 예선] 회의실 예약
https://softeer.ai/practice/6266
Softeer - 현대자동차그룹 SW인재확보플랫폼
회사에는 N개의 회의실이 있다. 수많은 팀이 모여 토론하고 업무를 처리하기 위해서는 회의실이 필수적이다. 내부망에 아주 간단한 회의실 예약 시스템이 있지만 편의성이 매우 떨어진다. 단순
softeer.ai
[내 풀이]
- 단순 구현 문제, 문자열 포맷
- 연속된 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('-----')