[프로그래머스/파이썬] 오픈채팅방(42888) 풀이
업데이트:
문제 정보
- 문제 출처: 프로그래머스 코딩테스트 연습
- 문제 링크: 오픈채팅방(42888)
- 문제풀이 코드 GitHub 링크
- 풀이 언어: Python 3
풀이
문제
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,Leave만msgs에 저장
- 2차 순회:
msgs의uid를 최종names[uid]로 치환해 메시지 생성
이렇게 하면 닉네임 변경(Change)이 과거 메시지에도 정확히 반영됩니다.
댓글남기기