파이썬 알고리즘 : 오픈채팅방

카카오 코딩테스트

2024년 5월 21일 알고리즘 문제풀이

문제

난이도

Lv.2

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def solution(record):
    n = len(record)
    answer = []
    # 들어오거나 나가는 행동을 저장할 배열
    arr = dict()
    # 각 아이디의 최종 닉네임을 저장하기 위한 배열
    name = dict()
    # 데이터를 가공하기 위한 반복문
    for i in range(n):
        # 데이터 분리
        data = list(record[i].split(" "))
        tmp = dict()
        # 들어오고 나가는 행동이면 저장
        if data[0] != "Change":
            tmp["message"] = data[0]
            tmp["id"] = data[1]
            arr[i] = tmp
            # 들어올 때 닉네임을 바꾸는 경우 추적
            if data[0] == 'Enter':
                name[data[1]] = data[2]
        # 닉네임을 바꾸는 행동일땐 저장하지 않고 이름만 갱신
        else:
            name[data[1]] = data[2]

    # 출력하기 위한 반복문
    for i in range(n):
        # i번째일때 바꾸는 행동이였으면 arr에 해당 키 값은 존재하지 않음
        if i not in arr:
            continue

        # 각 아이디의 최종 닉네임으로 출력
        if arr[i]["message"] == "Enter":
            c = name[arr[i]["id"]] + "님이 들어왔습니다."
        elif arr[i]["message"] == "Leave":
            c = name[arr[i]["id"]] + "님이 나갔습니다."
        answer.append(c)
    return answer