진박사의 일상

[프로그래머스] 19 카카오 코테 - 오픈채팅방 본문

프로그래밍/코딩테스트 공부

[프로그래머스] 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 할 때는 명령어에 닉네임 안 넣어주니까 따로 닉네임을 찾아서 지워줘야 하는건데 그걸 안하고 있으니 엉뚱한 닉네임이 퇴장했다고 뜨는거였음... 하 진짜 그것도 모르고 변경하는 부분에서만 에러를 찾아다녔으니 쓰으으으읍.... 오히려 변경 안하는 부분에서 에러가 난 거였음 ㅠㅠ 실제 시험이었으면 이거 하나 해결하고 시험 끝났으려나...