입장기록을 관리하는 리스트에서는 uid로 모두 기록한 후, uid와 nickname매칭을 관리하는 리스트를 갱신시킨 후 나중에 한번에 다 바꿔주는 방식으로 풀었다.
from collections import defaultdict
def solution(record):
enter_leave_list = []
uid_nickname_match = defaultdict(str)
for one_record in record:
split_list = one_record.split()
op = split_list[0]
if op=="Enter":
uid, nickname = split_list[1], split_list[2]
enter_leave_list.append([uid, "Enter"])
uid_nickname_match[uid] = nickname
elif op=="Leave":
uid = split_list[1]
enter_leave_list.append([uid, "Leave"])
else:
uid, nickname = split_list[1], split_list[2]
uid_nickname_match[uid] = nickname
answer = []
for uid, enter_or_leave in enter_leave_list:
message = f"{uid_nickname_match[uid]}"
if enter_or_leave == "Enter":
message += "님이 들어왔습니다."
else:
message += "님이 나갔습니다."
answer.append(message)
return answer
Leave가 아닐때만 닉네임 변경하고, record만 돌면서 출력해도 된다.