
문제
카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다.
신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다.
"[닉네임]님이 들어왔습니다."
채팅방에서 누군가 나가면 다음 메시지가 출력된다.
"[닉네임]님이 나갔습니다."
채팅방에 들어오고 나가거나, 닉네임을 변경한 기록이 담긴 문자열 배열 record가 매개변수로 주어질 때, 모든 기록이 처리된 후, 최종적으로 방을 개설한 사람이 보게 되는 메시지를 문자열 배열 형태로 return 하도록 solution 함수를 완성하라.
입출력 예시
record result ["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"] ["Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."]
{user_id : user_name}로 저장하여 고유의 키값을 가지게 만든다.def solution(record):
func_list = [] # user의 동작을 저장하는 리스트
user_dict = {} # user의 정보를 저장하는 딕셔너리
result = [] # 정답 출력을 저장하는 리스트
for i in record:
# Leave의 경우 split 결과가 2이기 때문에 if문으로 조건 지정
parts = i.split(' ') # 공백을 기준으로 나뉘어 있기 때문에 split 사용
if len(parts) == 3:
func, id, name = parts
func_list.append([func, id]) # 동작과 id를 함께 저장
user_dict[id] = name
elif len(parts) == 2:
func, id = parts
func_list.append([func, id])
for cmd in func_list:
if cmd[0] == "Enter":
result.append(f"{user_dict[cmd[1]]}님이 들어왔습니다.")
elif cmd[0] == "Leave":
result.append(f"{user_dict[cmd[1]]}님이 나갔습니다.")
else:
continue # "Change"의 경우 따로 출력할 것이 없기 때문에 생략
return result