https://school.programmers.co.kr/learn/courses/30/lessons/42888
def solution(record):
result = []
answer = {}
seq = []
for r in record :
lis = list(r.split())
if len(lis)==2 :
enter, uid, nick = lis[0], lis[1], answer[uid][0]
# Leave 의 경우엔 nick 그대로
else :
enter, uid, nick = lis[0], lis[1], lis[2]
seq.append(uid)
# 0번째 인덱스에 닉네임, 이후 인덱스는 Enter or Leave
if uid not in answer : # 초기화
answer[uid] = [nick, enter]
else :
# (1) 채팅방을 나간 후, 새로운 닉네임으로 다시 들어가거나
if (enter == "Enter" and nick!=answer[uid][0]) or enter=="Change": # 채팅방에서 닉네임을 변경
answer[uid][0] = nick
answer[uid].append(enter)
for s in seq :
if answer[s][1] == "Leave" :
enter_or_leave = "나갔습니다."
elif answer[s][1] == "Enter" :
enter_or_leave = "들어왔습니다."
else :
answer[s].pop(1)
continue
result.append("%s님이 %s" % (answer[s][0], enter_or_leave))
answer[s].pop(1)
return result
print(solution([
"Enter uid1234 Muzi",
"Enter uid4567 Prodo",
"Leave uid1234",
"Enter uid1234 Prodo",
"Change uid4567 Ryan",
"Leave uid4567",
"Enter uid1234 Cat",
"Enter uid3579 Dog",
"Change uid3569 CuteDog",
"Leave uid1234",
"Leave uid3579"
]))
def solution(record):
result = []
answer = {}
seq = []
for r in record :
lis = list(r.split())
if len(lis)==2 :
enter, uid, nick = lis[0], lis[1], answer[uid][0]
# Leave 의 경우엔 nick 그대로
else :
enter, uid, nick = lis[0], lis[1], lis[2]
seq.append(uid)
# 0번째 인덱스에 닉네임, 이후 인덱스는 Enter or Leave
if uid not in answer : # 초기화
answer[uid] = [nick, enter]
else :
# (1) 채팅방을 나간 후, 새로운 닉네임으로 다시 들어가거나
if nick!=answer[uid][0] or enter=="Change": # 채팅방에서 닉네임을 변경
answer[uid][0] = nick
answer[uid].append(enter)
for s in seq :
if answer[s][1] == "Leave" :
enter_or_leave = "나갔습니다."
elif answer[s][1] == "Enter" :
enter_or_leave = "들어왔습니다."
else :
answer[s].pop(1)
continue
result.append("%s님이 %s" % (answer[s][0], enter_or_leave))
answer[s].pop(1)
return result
print(solution(["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan", "Leave uid4567", "Enter uid1234 Cat"]))
if nick!=answer[uid][0] or enter=="Change"
로 처리해두었었는데 이렇게 하고
아래 테스트케이스를 넣어보면
uid1234 의 이름이 Cat 으로 떠야하는데, uid3569 의 이름인 CuteDog로 뜨는 것임~
반례 결과값
['CuteDog님이 들어왔습니다.', # 얘 이름은 Cat으로 떠야하는데
'Ryan님이 들어왔습니다.',
'CuteDog님이 나갔습니다.', 'CuteDog님이 들어왔습니다
.', 'Ryan님이 나갔습니다.', 'CuteDog님이 들어왔습니다.', 'CuteDog님이 들어왔습니다.', 'CuteDog님이 나갔습니
다.', 'CuteDog님이 나갔습니다.']
따라서 닉네임 변경과정에서의 로직을 확실히 해주고자
# (1) 채팅방을 나간 후, 새로운 닉네임으로 다시 들어가거나
if (enter == "Enter" and nick!=answer[uid][0]) or enter=="Change": # 채팅방에서 닉네임을 변경
로 두가지 경우를 처리해주었더니 정답처리가 되었다.
(1)
[
"Enter uid1234 Muzi",
"Enter uid4567 Prodo",
"Leave uid1234",
"Enter uid1234 Prodo",
"Change uid4567 Ryan",
"Leave uid4567",
"Enter uid1234 Cat",
"Enter uid3579 Dog",
"Change uid3569 CuteDog",
"Leave uid1234",
"Leave uid3579"
]
정답
['Cat님이 들어왔습니다.',
'Ryan님이 들어왔습니다.',
'Cat님이 나갔습니다.',
'Cat님이 들어왔습니다.',
'Ryan님이 나갔습니다.',
'Cat님이 들어왔습니다.',
'Dog님이 들어왔습니다.',
'Cat님이 나갔습니다.',
'Dog님이 나갔습니다.']