프로그래머스 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