[프로그래머스/파이썬] 오픈채팅방(42888) 풀이

업데이트:



문제 정보


풀이

문제

Enter, Leave, Change 기록이 순서대로 주어질 때, 최종 닉네임 기준으로 입장/퇴장 메시지를 출력하면 됩니다.

핵심은 “메시지 생성 시점”이 아니라 “최종 닉네임 적용 시점”입니다.

코드

def solution(records):
    answer = []

    names = {}
    msgs = []

    for record in records:
        try: op, uid, name = record.split()
        except: op, uid = record.split()
        if op  == 'Change':
            names[uid]=name
        elif op == 'Enter':
            names[uid]=name
            msgs.append((uid,'님이 들어왔습니다.'))
        elif op == 'Leave':
            msgs.append((uid,'님이 나갔습니다.'))
        
    for msg in msgs: answer.append(names[msg[0]]+msg[1])
    
    return answer


print(solution(["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]))

설명

두 단계로 나눠 처리합니다.

  • 1차 순회:
    • uid -> 닉네임 최신 상태를 names에 기록
    • 출력이 필요한 Enter, Leavemsgs에 저장
  • 2차 순회:
    • msgsuid를 최종 names[uid]로 치환해 메시지 생성

이렇게 하면 닉네임 변경(Change)이 과거 메시지에도 정확히 반영됩니다.



댓글남기기