본문 바로가기
알고리즘 문제풀이/소프티어

[소프티어 Lv2] [21년 재직자 대회 예선] 회의실 예약(문자열 포맷)

by summer_light 2023. 11. 2.

[소프티어 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('-----')

 

 

 

 

 

 

 

댓글