Algorithm/note
[2019 KAKAO BR] 오픈채팅방
by akatapata
2022. 1. 27.
- 유저 아이디는 고유
- 닉네임을 사용하는 오픈채팅방, 닉네임은 중복허용
- 채팅방 나가거나 들어오면 '\닉네임님이 들어오셨습니다.', '\닉네임님이 나갔습니다.' 메시지 출력
- 닉네임 변경시 기존 메시지의 닉네임도 변경된다
- 닉네임은 채팅방에서 변경하거나 나갔다 들어오면서 변경
- 채팅방 출입과 닉네임을 변경한 기록 record가 주어질때 최종적인 채팅방 메시지
Solution
- 사용자별 출입 기록을 순서대로 기록(id, leave or enter)
- 사용자의 닉네임을 딕셔니리에 저장, 가장 마지막에 사용한 닉네임으로 최종 메시지 생성
Code
def solution(record):
results = []
# nicks[id] = nick
nicks=defaultdict(str)
# (id, state)
# id : uid1234,
# state : enter-True leave-False
events = []
for row in record:
row = row.split()
what , who = row[0],row[1]
if what == 'Enter':
nicks[who] = row[2]
events.append((who,True))
elif what == 'Leave':
events.append((who,False))
else :
nicks[who] = row[2]
for who, enter in events:
if enter : results.append(''.join([nicks[who],'님이 들어왔습니다.']))
else : results.append(''.join([nicks[who],'님이 나갔습니다.']))
return results