
프로그래머스 2019 KAKAO BLIND RECRUITMENT
- Lv 2. 오픈채팅방 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/42888
def solution(record):
answer = []
# Enter / Leave / Change
# uid
# 닉네임
result = []
nickname_dict = dict()
for rec in record:
record_list = list(rec.split(" "))
if (record_list[0] == "Enter"):
nickname_dict[record_list[1]] = record_list[2]
ans_str = record_list[1] + "님이 들어왔습니다."
result.append(ans_str)
if (record_list[0] == "Change"):
nickname_dict[record_list[1]] = record_list[2]
if (record_list[0] == "Leave"):
ans_str = record_list[1] + "님이 나갔습니다."
result.append(ans_str)
for i in result:
uid = list(i.split("님"))[0]
ans = i.replace(uid, nickname_dict.get(uid))
answer.append(ans)
return answer
유저 아이디에 따라서 닉네임이 계속 바뀌어야 하므로 result 배열에는 들어오고 나가는 내용을 닉네임이 아닌 유저 아이디로 기록해놓고, 유저 아이디별 닉네임을 사전으로 저장한 뒤, 최종적으로 replace를 통해 모든 유저 아이디에 따른 닉네임으로 변경해준다.깔끔한 정답코드라고 생각된다.
printer 사전을 이용한 점이 인상깊다 !
def solution(record):
answer = []
namespace = {}
printer = {'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
for r in record:
rr = r.split(' ')
if rr[0] in ['Enter', 'Change']:
namespace[rr[1]] = rr[2]
for r in record:
if r.split(' ')[0] != 'Change':
answer.append(namespace[r.split(' ')[1]] + printer[r.split(' ')[0]])
return answer