[Programmers] 오픈채팅방

hodu·2022년 10월 14일
0

algorithm

목록 보기
9/27

https://programmers.co.kr/learn/courses/30/lessons/42888

오픈채팅방 문제는 dictionary를 잘 사용할 수 있는지 물어보는 문제인것같다.

def solution(record):
    user = {}
    answer = []

    for i in record:
        k = i.split(' ')
        if k[0] == 'Enter':
            user[k[1]] = k[2]
            answer.append([k[1],'님이 들어왔습니다.'])

        elif k[0] == 'Leave':
            answer.append([k[1],'님이 나갔습니다.'])

        elif k[0] == 'Change':
            user[k[1]] = k[2] 

    answer = [user[i[0]] + i[1] for i in answer]
    
    return answer

스페이스에 따라 record를 나눠주면

0번째엔 Enter
1번째엔 uid1234
2번째엔 Muzi

로 나뉘게 된다.
그래서 이 나뉜 값 중 첫번째에 따라 분기를 해줬다.

Enter일 경우에는 새로운 계정이 들어왔으므로

user라는 딕셔너리에 아이디를 key값으로, value는 닉네임값으로 저장해주었다.

❗️dictionary

{'키' : '값'}

위와 같이 정의되며 키는 유일하고 변하지 않는 값이다.
원래 순서가 없었지만 3.7버전부터는 순서가 생겼다.

그 다음 answer에 [userid+ '님이 들어왔습니다.']를 저장한다.

왜 userid를 저장했냐면 나중에 Change로 닉네임이 바뀔수 있기 때문이다.

Leave일 경우에는
answer에 [userid+ '님이 나갔습니다.']를 저장해준다.
여기서 user값은 건들지않는다.

"Muzi가 나간후 다시 들어올 때, Prodo 라는 닉네임으로 들어올 경우 기존에 채팅방에 남아있던 Muzi도 Prodo로 다음과 같이 변경된다."

이 조건때문에 변경해주지 않았다.

Change일 경우엔
user 값만 변경시켜주고 변경메세지를 띄우지 않으므로 answer는 건드리지 않는다.

마지막으로 ['user1234님이 들어왔습니다', .... ]로 저장되어 있는 answer값을 닉네임으로 변환시켜준다

profile
안녕 세계!

0개의 댓글