ericagong / algorithm_solving

2 stars 0 forks source link

[구현] 오픈채팅방 #59

Closed ericagong closed 1 year ago

ericagong commented 1 year ago

⭐ 성찰

  1. 문제 꼼꼼히 잘 읽기. 특정 조건인 경우, 입력값이 상이하다든가의 처리 필요
  2. 함수 기능별로 분리하는 편이 좋음

❓ 문제 상황

오픈채팅방

👨‍💻 문제 해결

✅ 1차 풀이: Map을 이용한 최신 값 반영

  1. key: user_id, value: nickname 형태의 Map 생성 (단, 이 때, Leave가 아닌 Enter, Change action에 대해서만 value 업데이트 수행)
  2. Enter/Leave action에 따라 적절한 메시지 배열에 추가하고, 배열 반환
    
    function get_message(action, nickname) {
    switch(action) {
        case 'Enter':
            return `${nickname}님이 들어왔습니다.`
        case 'Leave':
            return `${nickname}님이 나갔습니다.`
    }
    }

function solution(record) { const users = new Map() const actions = []

record.forEach((r) => {
    const [action, id, nickname] = r.split(' ')
    // Leave 일 때는 nickname 부재
    if(action === 'Enter' || action === 'Change') users.set(id, nickname) 
    if(action !== 'Change') actions.push([action, id])
})

const result = []
actions.forEach(([action, id]) => {
    const nickname = users.get(id)
    result.push(get_message(action, nickname))
})

return result

}

ericagong commented 1 year ago

👍 리뷰완료