말랑한 하루

[Programmers] 오픈채팅방 (Lv 2, JavaScript) 본문

문제풀이/Programmers

[Programmers] 오픈채팅방 (Lv 2, JavaScript)

지수는말랑이 2022. 7. 8. 21:20
반응형

[ 개요 ]
풀이시간 : 30분

[ 학습 내용 ]

- forEach()

많은 풀이에서 map보다 forEach를 활용한 풀이가 많이 보였다. 배열을 순회하는 경우 항상 map을 사용했는데,

1) 배열 순회만이 목적이면 forEach를,

2) 순회 후 새 배열을 얻는 것이 목적이면 map을 사용한다.

각 활용방식에 따라 적절히 이용하자.

- 비구조화 할당
객체에 대한 비구조화 할당에 대해서만 인지하고 있었다.

const {id, name} = item;

배열에 대한 비구조화 할당 역시 같은 방식으로 활용할 수 있었다.

const [id, name] = item.split(" ");

늦게나마 알게되어 다행.


[ 소스 코드 ]

function solution(record) {
    var answer = [];
    var users = [];
    
    record.map((write) => {
        let [user_action, user_id, user_name] = write.split(" ");
        
        if (user_name !== undefined) {
            users[user_id] = user_name;
        }
        
        if (user_action === "Enter" || user_action === "Leave") {
            let action = user_action === "Enter"
                ? "님이 들어왔습니다."
                : "님이 나갔습니다.";
            
            answer.push({
                "user_id": user_id,
                "user_action": action,
            })
        }
    })
    
    answer = answer.map((ans) => {
        return users[ans.user_id] + ans.user_action;
    })
    
    return answer;
}

[ 심화 코드 ]

var solution=(_,m={})
=> _.reduce((c,r)
=> ([[o],i,n]=r.split(' '),o!='L'&&(m[i]=n),o!='C'&&c.push([i,o=='E']),c), []).map(([i,e])
	=> m[i]+'님이 '+(e?'들어왔':'나갔')+'습니다.')

[ 코드 분석 ]

경이롭다. 분석이 꼭 필요하다.

반응형
Comments