[프로그래머스] 오픈채팅방

짱J·2023년 3월 27일
0

알고리즘 문제 풀이

목록 보기
29/30
post-thumbnail

문제 설명

Muzi의 닉네임이 Prodo로 바뀌며 관리자창의 로그도 변한 것을 볼 수 있다.

구현 아이디어

  1. 딕셔너리에 유저 아이디를 key, 닉네임을 value로 하여 값을 저장한다. (ex. {'uid1234': 'Prodo'})
  2. 유저 아이디로 로그를 만든다. (ex. "uid1234님이 들어왔습니다")
  3. 마지막에 유저 아이디를 닉네임으로 치환한다.
    (ex. "uid1234님이 들어왔습니다" → "Prodo님이 들어왔습니다")

전체 코드 - 정답입니다

from collections import defaultdict # KeyError 방지를 위해 자주 사용

def solution(records):
    answer = []
    d = defaultdict(str)
    
    for record in records:
        arr = record.split(' ')
        action = arr[0]
        
        # 1. Enter - 딕셔너리에 닉네임 정보를 저장하고, 로그에도 추가
        if action == 'Enter':
            uid, nickname = arr[1], arr[2]
            # uid → 닉네임 치환을 편하게 하기 위해 리스트 형태로 추가
            answer.append([uid, '님이 들어왔습니다.'])
            d[uid] = nickname
            
        # 2. Leave - 로그에 추가
        elif action == 'Leave':
            uid = arr[1]
            answer.append([uid, '님이 나갔습니다.'])
            
        # 3. Change - 딕셔너리에서 닉네임 정보 수정
        else: # action == 'Change'
            uid, nickname = arr[1], arr[2]
            d[uid] = nickname

    for i in range(len(answer)):
        answer[i] = d[answer[i][0]] + answer[i][1]
    
    return answer

첫 번째 for문을 돈 후 d와 answer은 아래와 같다.

for i in range(len(answer)):
        answer[i] = d[answer[i][0]] + answer[i][1]

를 통해 uid를 닉네임으로 치환하고, 리스트였던 answer[i]를 string으로 바꾸어준다.

profile
[~2023.04] 블로그 이전했습니다 ㅎㅎ https://leeeeeyeon-dev.tistory.com/

0개의 댓글