풀이 과정
퇴실 순서는 리스트에서 큐 형태로 바꾸어 줌.
=> 구현의 편의성을 위해 큐로 바꾸어주는게 좋음!구현의 편의를 위해 처음 인원수 저장할 때는 인원수 + 1만큼의 배열을 만들어 두고, 리턴할 때는 첫번째 인덱스부터 리턴
입실한 사람 순서대로 반복문을 진행한다.
- 입실한 사람은 set에다가 넣어준다. (비교의 용이, 속도 면에서 좋을 것 같아서)
- 입실 처리가 되었으면 퇴실 인원이 있는지도 확인한다.
- 퇴실 인원의 확인은 큐의 맨 앞을 확인하면 되며, 퇴실 인원이라면 큐에서 빼준다.
- 빼주면서 인원 처리를 해주어야 하는데, 빼낸 사람을 제외한 기존 입실 처리된 인원들은 빼낸 사람을 만났으므로, 기존 입실 처리된 인원들이 만난 사람 수에는 1을 더해준다
- 또한, 빼낸 사람의 인원에는 빼낸 사람을 제외한 기존 입실 처리된 인원들의 수를 더해준다.
소스 코드
def solution(enter, leave):
answer = [0] * (len(enter) + 1)
leave = deque(leave)
visited = set()
for e_person in enter:
visited.add(e_person)
while leave:
if leave[0] in visited:
answer[leave[0]] += (len(visited) - 1)
visited.remove(leave.popleft())
for left_person in visited:
answer[left_person] += 1
else:
break
return answer[1:]
출처
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 4 ] [ BFS + Kruskal ] 지형 이동 (0) | 2021.09.15 |
---|---|
[ Lv 4 ] [ 이분 탐색 ] 징검다리 (0) | 2021.09.15 |
[ Lv 2 ] [ BFS ] 카카오프렌즈 컬러링북 (0) | 2021.09.10 |
[ 위클리 챌린지 ] [ 3주차 ] 퍼즐 조각 채우기 (0) | 2021.09.10 |
[ 위클리 챌린지 ] [ 6주차 ] 복서 정렬하기 (0) | 2021.09.08 |