알고리즘/프로그래머스

Programmers | Level 2 - 오픈 채팅방 (python)

유하 yuha 2022. 3. 3. 23:13

💬 프로그래머스 Level 2 - 오픈 채팅방

 

 

 


✏️ 문제

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

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

입출력 예

 


💡 해결방법

유저의 아이디와 유저의 닉네임 / 유저의 상태를 따로 구분해야 한다.

유저의 아이디와 유저의 닉네임은 딕셔너리를 이용했다. 만약 상태가 Enter나 Change일 경우 key 값을 유저의 아이디, value값을 유저의 닉네임으로 두어 만약 change할 경우에도 최종적으로 정해지는 값이 저장되도록 했다.

 

상태는 순서가 중요하므로 리스트로 구현했다. 리스트에 상태와 유저의 아이디를 저장하고, 순차적으로 enter일 경우 / leave일 경우를 출력하기 위해 유저의 아이디를 이용해 딕셔너리의 value값(유저의 최종 변경된 닉네임)을 구하도록 했다.

 

👩🏻‍💻 소스코드

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

    for s in record:
        if s[0] == 'L':
            state, uid = s.split()
        else:
            state, uid, nickname = s.split()
            user[uid] = nickname
        log.append((state, uid))

    for state, uid in log:
        if state == "Enter":
            answer.append(str(user.get(uid)) + "님이 들어왔습니다.")
        elif state == "Leave":
            answer.append(str(user.get(uid)) + "님이 나갔습니다.")

    return answer