[Softeer] 회의실 예약 (level 2)
사용 언어: Python3
문제
풀이
내 풀이
import sys
def calc(lst):
ans = []
if len(lst) == 0:
ans.append('09-18')
else:
for i in range(len(lst)):
if i == 0:
if lst[i][0] != 9:
ans.append('09-{}'.format(lst[i][0]))
else:
pass
if i == len(lst)-1:
if lst[i][1] != 18:
ans.append('{}-18'.format(lst[i][1]))
else:
pass
else:
if lst[i][1] != lst[i+1][0]:
ans.append('{}-{}'.format(lst[i][1], lst[i+1][0]))
if len(ans) == 0:
print('Not available')
return
else:
print('{} available:'.format(len(ans)))
for x in ans:
print(x)
N, M = map(int, input().split())
dic = dict()
for _ in range(N):
dic[input()] = [] # 초기화
for _ in range(M):
r, s, e = input().split()
s, e = int(s), int(e)
dic[r].append((s, e))
for x in dic.items():
x[1].sort() # 시작 시간 기준 정렬
dic = dict(sorted(dic.items())) # 회의실 이름 기준 오름차순
cnt = 0
for x in dic.items():
cnt += 1
print('Room {}:'.format(x[0]))
calc(x[1]) # [(s, e)] 리스트 전달
if cnt < N:
print('-----')
- 정답!
- 하지만 거의 반나절이 걸렸다ㅜ
🌟 다른 풀이 - 정답 값 따로 저장 X
import sys
N, M = map(int, input().split())
dic = dict()
for _ in range(N):
dic[input()] = [0] * 18 # ?
for _ in range(M):
r, s, e = input().split()
s, e = int(s), int(e)
for i in range(s, e):
dic[r][i] = 1
dic = sorted(dic.items()) # 리스트 형 변환
for i in range(N):
cur = 1 # 현재 값
tmp = []
for j in range(9, 18):
if cur == 1 and dic[i][1][j] == 0: # 1 -> 0 순간
start = j
cur = 0
elif cur == 0 and dic[i][1][j] == 1: # 0 -> 1 순간
end = j
cur = 1
tmp.append([start, end])
if cur == 0: # 맨 마지막 경우 cur가 1이 되지 못하고 끝나는 경우
tmp.append([start, 18])
print('Room {}:'.format(dic[i][0]))
if len(tmp) == 0:
print('Not available')
else:
print('{} available:'.format(len(tmp)))
for u in range(len(tmp)):
print(f'{tmp[u][0]:02d}-{tmp[u][1]}') # 🌟 형식지정자 (0 추가)
if i != N-1:
print('-----')
- 참고
내 풀이 - 0511 추가 (정답 값(res
) 따로 저장)
import sys
input = sys.stdin.readline # 입력량이 많을 때 속도 증가
N, M = map(int, input().rstrip().split())
dic = dict() # 각 방 별로 회의 시간을 담아둘 사전 (ex. [0,0,...,0,1,1])
res = dict() # 각 방별로 회의 "가능" 시간을 담아둘 사전 (ex. [(10, 11), (14, 16)])
for _ in range(N):
room = input().rstrip()
dic[room] = [0] * 19
res[room] = []
for _ in range(M):
r, s, e = input().rstrip().split()
s, e = int(s), int(e)
for i in range(s, e):
dic[r][i] = 1
dic = sorted(dic.items(), key=lambda x:x[0]) # dict -> list 형 변환
for x in dic:
isStart = False
# 빈 회의실 시간 찾아서 res에 append
for i in range(9, 18):
if isStart == False and x[1][i] == 0:
isStart = True
st = i # start time
if isStart == True and x[1][i] == 1:
isStart = False
et = i # end time
res[x[0]].append((st, et)) # x[0]은 avante
if isStart == True: # 맨 마지막 경우 isStart가 False 되지 못하고 끝나는 경우
res[x[0]].append((st, 18))
res = sorted(res.items(), key=lambda x:x[0]) # dict -> list 형 변환
for i in range(len(res)):
print('Room {}:'.format(res[i][0]))
if len(res[i][1]) == 0:
print('Not available')
else:
print('{} available:'.format(len(res[i][1])))
for val in res[i][1]:
print(f'{val[0]:02d}-{val[1]}')
if i != N-1:
print('-----')
💛 개인 공부 기록용 블로그입니다. 👻