Search
Duplicate

상담원 인원

Level
3
문제 진행 상태
코드 완료
해설 작성 중
알고리즘 & 자료구조
완전탐색
정답률 (%)
10
태그
2023 현대모비스 알고리즘 경진대회 예선

문제 출처

풀이 과정

전체 코드

from itertools import combinations_with_replacement from collections import deque def solution(상담_유형수, 멘토수, 요청_리스트): 남은_멘토수 = 멘토수 - 상담_유형수 선택_리스트 = [i for i in range(상담_유형수)] # [0, 1, ..., k-1] 최소_시간 = 1e+9= deque() for 유형_조합 in combinations_with_replacement(선택_리스트, 남은_멘토수): 총_대기시간 = 0 유형별_남은_멘토수 = [1 for _ in range(상담_유형수)] 유형별_상담_사전 = {i: [] for i in range(상담_유형수)} # 각 유형마다 상담 종료 시간(리스트) 저장 for 요청 in 요청_리스트:.append(요청) # 각 유형 별 배치 가능한 멘토 수 계산 for 유형 in 유형_조합: 유형별_남은_멘토수[유형] += 1 # 상담 요청 정보 및 유형 별 멘토 수 정보에 따라 총 대기 시간을 계산 while: 요청 =.popleft() 시작_시간, 상담_시간, 유형_번호 = 요청[0], 요청[1], 요청[-1] 종료_시간_리스트 = 유형별_상담_사전[유형_번호-1].copy() # 유형별 상담 현황 갱신: 상담이 끝난 멘토가 있는지 확인 후 갱신 for 상담_종료_시간 in 유형별_상담_사전[유형_번호-1]: if 시작_시간 >= 상담_종료_시간: 유형별_남은_멘토수[유형_번호-1] += 1 종료_시간_리스트.remove(상담_종료_시간) # 해당 상담 유형의 멘토가 남은 경우 -> 바로 상담 진행 if 유형별_남은_멘토수[유형_번호-1] > 0: 유형별_남은_멘토수[유형_번호-1] -= 1 종료_시간_리스트.append(시작_시간 + 상담_시간) # 해당 상담 유형의 멘토가 없는 경우 -> 가장 빠른 시간에 끝나는 멘토한테 상담 대기 else: 총_대기시간 += (종료_시간_리스트[0] - 시작_시간) 종료_시간 = 종료_시간_리스트.pop(0) 종료_시간_리스트.append(종료_시간 + 상담_시간) 유형별_상담_사전[유형_번호-1] = sorted(종료_시간_리스트) if 최소_시간 > 총_대기시간: 최소_시간 = 총_대기시간 return 최소_시간
Python
복사