문제
uid의 변경 내역을 갖고 있다가, 최종 uid와 닉네임의 매칭에 따라 채팅방 메시지를 출력합니다.
접근방식
id와 nickname을 매치하는 딕셔너리와 uid와 command 배열을 갖는 출력대기 배열을 생성하여, 마지막에 출력대기 배열을 순회하며 각 uid의 최종 닉네임과 command를 함께 출력해주었습니다.
단계
- 파싱 : record를 순회하며 command, id, nickname으로 파싱
- command에 따라 동작을 분리
- Enter : idMath 딕셔너리 업데이트 + 출력대기
- Change : idMatch 딕셔너리 업데이트
- Leave : 출력대기
- 출력대기(inouts) 배열을 순회하며 uid에 따른 최종 닉네임을 기반으로 result 생성
답 코드
def solution(record):
answer = []
# id와 nickname을 매치하는 딕셔너리입니다.
# Enter : 딕셔너리 생성
# Change : value 수정
idMatch = {}
# 출력을 위한 딕셔너리로, command와 출력문을 갖습니다.
commPrint = {}
commPrint["Enter"] = "님이 들어왔습니다."
commPrint["Leave"] = "님이 나갔습니다."
# 출력대기를 위한 배열로, [uid, command]들을 갖게 됩니다.
inouts = [] # 이후 inouts을 순회하며 uid에 따른 최종 닉네임을 기반으로 result를 생성합니다.
for rec in record :
# 1. 파싱 : command id nickname
recArr = rec.split()
command = recArr[0]
uid = recArr[1]
nickname = ''
# 2. command에 따라 동작을 분리
# Enter : idMatch 딕셔너리 업데이트 + 출력대기(inouts)
# Change : idMatch 딕셔너리 업데이트
# Leave : 출력대기(inouts)
if command in ["Enter", "Change"] :
nickname = recArr[2]
idMatch[uid] = nickname # 딕셔너리 업데이트
if command in ["Enter", "Leave"] :
inouts.append([uid, command]) # 출력대기
# inouts을 순회하며 uid에 따른 최종 닉네임을 기반으로 result를 생성합니다.
for uid, command in inouts :
answer.append(idMatch[uid]+commPrint[command])
return answer