드디어 2단계 진입! 🥳
https://programmers.co.kr/learn/courses/30/lessons/42888
def solution(record):
tmp = []
user_dict = {}
uid_arr = []
for r in record:
if r[0] == 'L':
word, uid = r.split()
tmp.append(['L', uid])
if r[0] == 'E':
word, uid, nickname = r.split()
if uid not in uid_arr:
tmp.append(['E', uid])
user_dict[uid] = nickname
else:
user_dict[uid] = nickname
if r[0] == 'C':
word, uid, nickname = r.split()
user_dict[uid] = nickname
answer = []
for word, uid in tmp:
if word == 'E':
answer.append(f'{user_dict[uid]}님이 들어왔습니다.')
else:
answer.append(f'{user_dict[uid]}님이 나갔습니다.')
return answer
문제에 충실하게 구현만 잘 하면 되는 문제였다!
닉네임 변경을 반영하기 위해 uid: nickname 을 기록할 수 있는 딕셔너리 하나,
한 번 등장했던 uid 인지 여부를 파악하기 위한 uid 기록 배열 하나를 준비한다.
tmp 배열에는 정답을 출력하기 위해 Enter / Leave 여부와 uid 를 기록한다. uid 만 기록해 두고, 배열이 완성되었을 때 최종적으로 수정된 닉네임을 넣어 출력하기로 한다.
이제 입력으로 주어진 배열을 순회하면서 Leave, Enter, Change 의 경우로 나누어 작업을 수행한다.
'Leave'라면 word, uid 만 주어지므로 해당 내용을 tmp 배열에 추가한다.
'Change'라면 user_dict의 uid:nickname 를 갱신해준다.
'Enter'라면 두 가지 경우의 수를 나누어 처리해야 한다.
- uid 가 최초 등장인 경우
이 경우 닉변을 위한 입장이 아니라 최초 입장하는 경우이므로 tmp 배열에 내용을 추가하고, user_dict에 uid:nickname 정보를 기록한다.
- 한번 이상 등장했던 uid인 경우
이 경우 닉변을 위한 입장으로 판단할 수 있으므로, tmp 배열에는 내용을 추가하지 않고 user_dict의 uid:nickname 만 갱신해준다.
tmp배열이 완성되면 이 배열을 순회하면서 uid자리에 알맞은 nickname 을 딕셔너리에서 찾아 넣어준다.