프로그래밍/코딩테스트 공부
[프로그래머스] 19 카카오 코테 - 오픈채팅방
진박사.
2021. 9. 8. 04:27
문제 : 오픈채팅방의 입출입 및 닉네임 변경 내역을 입력받아 채팅방에 표시되는 로그를 출력하라(단 사용자는 uid로 구별하고... 아몰라 찾아보셈(...)
from collections import defaultdict
def solution(record):
answer = []
messages = defaultdict(list)
index = 0
for r in record:
if len(r.split()) == 3:
command, uid, name = r.split()
else:
command, uid = r.split()
if len(uid) > 10:
continue
if len(name) > 10:
continue
if command == "Enter":
if messages[uid]:
messages[uid] = [[s[0],name,s[2]] for s in messages[uid]] #변경
messages[uid].append([index, name,"님이 들어왔습니다."])
index += 1
elif command == "Leave":
messages[uid].append([index, messages[uid][0][1],"님이 나갔습니다."]) # 아 이걸 놓치네 멍청 ㅠㅠ
index += 1
elif command == "Change":
if messages[uid]: #존재시 변경
messages[uid] = [[s[0],name,s[2]] for s in messages[uid]] #변경
#answer = sum(list(messages.values()),[])
answer = [y for x in list(messages.values()) for y in x]
answer = sorted(answer, key=lambda x: x[0])
answer = [message[1] + message[2] for message in answer]
return answer
후기 : 아 진짜.... ㅠㅠㅠ 딱 하나만 고치면 되는거 가지고 거의 1시간도 넘게 애먹은 듯... Leave 할 때는 명령어에 닉네임 안 넣어주니까 따로 닉네임을 찾아서 지워줘야 하는건데 그걸 안하고 있으니 엉뚱한 닉네임이 퇴장했다고 뜨는거였음... 하 진짜 그것도 모르고 변경하는 부분에서만 에러를 찾아다녔으니 쓰으으으읍.... 오히려 변경 안하는 부분에서 에러가 난 거였음 ㅠㅠ 실제 시험이었으면 이거 하나 해결하고 시험 끝났으려나...