본문 바로가기

~2023

[Python] 오픈채팅방 - 2019 KAKAO BLIND RECRUITMENT

728x90
반응형

<문제 링크>

 

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

 

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

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

programmers.co.kr

 


<풀이>

record에 Enter, Leave, Change가 수행된 문자열이 담겨져 있어 해당 문자열에 따라 출력해야 하는 문구를 result로 내보낸다.

Change를 수행 할 경우 해당 id에 따른 전에 기록에서 닉네임이 바뀌어야 하기 때문에 문구를 바로 출력하면 문제가 있다. 그래서 배열에서 연산을 전부 수행한 다음에 result를 내보내면 된다.

def solution(record):
    answer = []
    id_list = dict()
    
    for s in record:
        s = s.split()
        
        if s[0] == "Enter":
            id_list[s[1]] = s[2]
            answer.append(f"{s[1]}님이 들어왔습니다.")
        elif s[0] == "Leave":
            answer.append(f"{s[1]}님이 나갔습니다.")
        else:
            id_list[s[1]] = s[2]
        
    for i in range(len(answer)):
        id = answer[i].split("님")[0]
        
        answer[i] = answer[i].replace(id, id_list[id])
    
    return answer

id로 닉네임을 찾아야하기 때문에 딕셔너리 형태의 id_list를 정의하고 유저 아이디와 유저 닉네임을 매핑한다.

그 다음에 answer에다가 해당 명령어에 따른 문구를 저장하는데 여기서 닉네임이 아닌 유저 id를 저장한다.

모든 문구가 담겼을 때 마지막 for문에서 유저 id를 id_list에 해당하는 유저 닉네임과 매핑해줘 요구하는 정답 요건에 맞춘다.

728x90
반응형