프로그래머스 입실 퇴실 코드 및 해설 (파이썬)
2021. 9. 14. 14:53ㆍalgorithm
반응형
https://programmers.co.kr/learn/courses/30/lessons/86048?language=python3
테스트 케이스 26, 27번에서 시간 초과 뜨는데 모르겠다 ㅎ
leave를 큐로 만들어서 leave의 모든 요소가 사라질 때까지 다음을 반복한다. 현재 회의실에 leave의 첫번째 요소가 있으면 바로 제거, 그렇지 않으면 그 사람이 들어올 때까지 enter의 첫 요소를 pop해서 회의실 안에 들여놓는다. 이렇게 회의실 인원에 변화가 있을 때마다 만난 사람이 있으면 딕셔너리에 저장해준다. 이 부분에서 for문 2개를 써서 시간 초과인 듯;;
from collections import deque, defaultdict
def solution(enter, leave):
room = [] # 빈 회의실로 초기화
N = len(enter) # 입실후 퇴실한 사람들의 총 인원
# key가 만난 사람들의 집합을 value로 갖는 딕셔너리
roommates = defaultdict(set)
enter = deque(enter)
leave = deque(leave)
while leave:
# 퇴실할 사람
cur = leave.popleft()
# 퇴실할 사람이 지금 회의실에 없으면, 그 사람이 들어올 때까지 enter에서 pop
while enter and cur not in room:
room.append(enter.popleft())
# 현재 회의실에 2명이상 있는 경우
if len(room) > 1:
# 만난 사람 목록 저장
for a in room:
for b in room:
if a < b:
roommates[a].add(b)
roommates[b].add(a)
# 퇴실 시킴
room.remove(cur)
# 1-N까지 총 만난 사람의 인원수
return [len(roommates[n]) for n in range(1, N+1)]
반응형
'algorithm' 카테고리의 다른 글
백준 인구 이동 코드 및 해설 (파이썬) (0) | 2021.09.22 |
---|---|
백준 감시 피하기 코드 및 해설 (파이썬) (0) | 2021.09.22 |
백준 연구소 코드 및 해설 (파이썬) (0) | 2021.09.08 |
백준 연산자 끼워넣기 코드 및 해설 (파이썬) (0) | 2021.09.08 |
백준 경쟁적 전염 코드 및 해설 (파이썬) (0) | 2021.09.08 |