코딩테스트 연습 - 오픈채팅방 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

풀이)

채팅방에 들어오고 나가는것을 로그를 기록해야 하는 문제인데 설정한 닉네임으로 로그를 남긴다. 중간에 사용자의 닉네임이 바뀐다면 해당 사용자에 의해 찍혔던 이전까지의 기록에도 바뀐 닉네임으로 기록되어야 한다.

문제를 해결하기 위해 우선 닉네임이 아닌 사용자의 아이디를 이용해 다음과 같이 메시지를 리스트에 저장한다.

['user1234', '님이 들어왔습니다.']

['user1234', '님이 나갔습니다.']

사용자가 채팅방에 입장하거나 닉네임을 변경할 때는 딕셔너리를 변경해준다.

이렇게 하면 userID와 출입메시지가 담긴 리스트와 userID:nickName이 담긴 딕셔너리가 생성된다.

 

이제 출입메시지가 담긴 리스트를 탐색하면서 userID에 맞는 nickName을 연결시켜 answer 리스트에 추가해준다.

코드)

def solution(record):
    answer = []
    userId = {}
    user = []
    for userData in record:
        u = userData.split(' ')
        a = []
        if u[0] == 'Enter':
            a.append(u[1]) # 아이디 추가
            a.append('님이 들어왔습니다.')
            userId[u[1]] = u[2] # 닉네임 등록
            answer.append(a)
            
        elif u[0] == 'Leave':
            a.append(u[1]) 
            a.append('님이 나갔습니다.')
            answer.append(a)    
        else:
            userId[u[1]] = u[2] # 닉네임 변경
        
    result = []
    for lst in answer: # ['uid1234',님이 들어왔습니다]
        result.append(userId[lst[0]] + lst[1])  #userId[lst[0]]  == Prodo

    return result

'프로그래머스' 카테고리의 다른 글

n^2 배열 자르기  (0) 2021.10.24
이진 변환  (0) 2021.10.24
후보키  (0) 2021.10.18
괄호 회전하기  (0) 2021.10.18
튜플  (0) 2021.10.10

+ Recent posts