작성일 : 2021년 11월 2일 2022년 1월 9일

문제 : https://programmers.co.kr/learn/courses/30/lessons/42888

해설 : https://kis6473.tistory.com/167

나의 풀이

// 21/11/02
정확성: 3.1
효율성: 0.0
합계: 3.1 / 50

function solution(record) {
    let map = [];
    let answer = [];
    
    let split = record.map(str => str.split(' '));
    
    split.forEach(arr => {
        if(arr[0] === 'Enter') {
            map.forEach(tmp => {
                if(tmp.id === arr[1]) {
                    tmp.name=arr[2];
                }
            })
            
            map.push({
                id:arr[1],
                name:arr[2],
                act:'님이 들어왔습니다.'
            });
        }
        if(arr[0] === 'Leave') {
            let tmp = map.filter(obj => obj.id === arr[1]);
            map.push({
                id:arr[1],
                name:tmp.name,
                act:'님이 나갔습니다.'
            });
        }
        if(arr[0] === 'Change') {
            map.forEach(tmp => {
                if(tmp.id === arr[1]) {
                    tmp.name=arr[2];
                }
            })
        }
    });
    
    answer = map.map(arr => arr.name + arr.act);
    
    return answer;
}

2022년 1월 9일

function solution(record) {
    var answer = [];
    
    record.forEach(str => {
        const [command, id, name] = str.split(' ');
        
        switch(command) {
            case 'Enter' : {
                answer.push({name, id, message: '님이 들어왔습니다.'});
                break;
            }
            case 'Leave' : {
                const getName = answer.filter(obj => obj.id === id)[0].name;
                answer.push({name:getName, id, message: '님이 나갔습니다.'});
                break;
            }
            case 'Change' : {
                answer.map(obj => {
                    if(obj.id === id) return {...obj, name:name};
                    //return obj;
                })
            }
        }
        
        console.log(answer.map(obj => obj.name+obj.message));
    });
    
    return answer.map(obj => obj.name+obj.message);
}

풀이 해설

function solution(record) {
    var answer = [];
    var member = new Map();
    
    record.forEach(str => {
        const [command, id, name] = str.split(' ');
        
        if(command === 'Leave') {
            answer.push([id, '님이 나갔습니다.']);
            
            return; // 나갈때는 이름을 다시 기록하지 않는다
						// Leave 할때는 id만 입력 받기 때문 🚨
        }
        
        if(command === 'Enter') {
            answer.push([id, '님이 들어왔습니다.']);
        }
        
        member.set(id, name);
    })
    
    return answer.map(arr => member.get(arr[0])+arr[1]);
}

후기

  1. 구조분해 할당을 사용하자
  2. Map() 자료구조는 get, push, set, delete, clear, size을 사용 가능하다
  3. id와 name은 map으로 관리한다