[Algorithm🧬] 오픈채팅방

또상·2021년 12월 21일
0

Algorithm

목록 보기
15/133
post-thumbnail

문제 / 풀이.py

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;
}
profile
0년차 iOS 개발자입니다.

0개의 댓글