import re
def solution(record):
answer = []
table = {} # uid 를 key 로 하여 이름을 저장.
organizedRecord = [] # uid, enter/leave 로그를 저장.
# 처음에는 정규표현식을 써서 형식별로 문자열을 처리하려고 했는데
# uidFormat = re.complie('uid[A-Za-z0-9]+')
# nameFormat = re.compile('[A-Za-z0-9]+')
for sentence in record:
# info = nameFormat.findall(sentence)
# 하고보니 그냥 split 하면... 되네..?
# leave 인 경우 name 이 없으므로 name은 안쪽에서 처리했다.
info = sentence.split(' ')
behavior = info[0]
uid = info[1]
# 동작에 따라 처리.
if behavior == 'Enter':
name = info[2]
table[uid] = name
organizedRecord.append([uid, behavior])
elif behavior == 'Leave':
organizedRecord.append([uid, behavior])
else:
name = info[2]
table[uid] = name
# uid, behavior 순으로 저장해뒀으므로
# uid, table[uid], behavior 를 찍어주면 됨.
for (uid, behavior) in organizedRecord:
behaviorString = "들어왔습니다." if behavior == 'Enter' else "나갔습니다."
answer.append(table[uid]+"님이 "+behaviorString)
return answer
처음에는 그냥 글자수 별로 잘랐었는데, 제출하니까 통과가 안되는걸 보고
정규표현식으로 처리를 할 수 있지 않을까? 하고 uid 포맷 만들고 name 포맷 만들고 findall 해보니까..? 어..? 그냥 split 하면 되네...? 하고 마지막에 고쳤다.
수업 코드
function solution(record){
let result = [];
let answer = [];
let 유저정보 = {};
for (const iterator of record) {
const [상태, 아이디, 닉네임] = iterator.split(' ');
if (상태 === 'Enter'){
유저정보[아이디] = 닉네임;
result.push([아이디, '님이 들어왔습니다.']);
} else if (상태 === 'Leave'){
result.push([아이디, '님이 나갔습니다.']);
} else if (상태 === 'Change'){
유저정보[아이디] = 닉네임;
}
}
// 지금 우리 데이터
// [[uid1234, 님이 들어왔습니다.], [uid4567, 님이 들어왔습니다.]]
for (const [아이디, 메시지] of result) {
answer.push(유저정보[아이디] + 메시지);
}
return answer;
}