1. 문제
https://programmers.co.kr/learn/courses/30/lessons/42888
2. 풀이
2.1. 나의 풀이
def solution(record):
answer = []
dict = {}
nick_dict = {}
ans_i = 0
for rec in record:
if rec.split()[0] != 'Leave':
work, uid, nickname = rec.split()
else:
work, uid = rec.split()
if work == 'Enter':
if uid not in dict:
dict[uid] = []
dict[uid].append(ans_i)
answer.append('E')
ans_i += 1
nick_dict[uid] = nickname
elif work == 'Leave':
dict[uid].append(ans_i)
answer.append('L')
ans_i += 1
elif work == 'Change':
nick_dict[uid] = nickname
for key in dict:
for i in dict[key]:
if answer[i] == 'E':
answer[i] = nick_dict[key] + "님이 들어왔습니다."
else:
answer[i] = nick_dict[key] + "님이 나갔습니다."
return answer
2.2. 숏코딩
먼저 닉네임을 갱신하고 나서 들어오고 나가는 여부만 확인하고 최종 닉네임으로 정답을 출력합니다.
## - , 이동규 , - , 김명환 , 우지호 외 4 명 님의 소스 코드
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