1. 문제
programmers.co.kr/learn/courses/30/lessons/42888
2. 접근 방법
Object써서 key에 uid를 담고 value에 nickname을 담아서 nickname을 모두 갱신 한 다음,
각 명령에 맞는 메시지를 출력해줬다.
3. 코드
Javascript
function solution(records) {
var answer = [];
let name = new Object()
let temp = [];
for (let i=0; i<records.length; i++) {
let record = records[i].split(' ')
let command = record[0]
let uid = record[1]
if (command === 'Enter') {
name[uid] = record[2]
temp.push(uid, 'enter')
} else {
if (command === 'Leave') {
temp.push(uid, 'exit')
} else {
name[uid] = record[2]
}
}
}
for (let i=0; i<temp.length; i+=2) {
let uid = temp[i]
let command = temp[i+1]
if (command === 'enter') {
answer.push([name[uid], '님이 들어왔습니다.'].join(''))
} else {
answer.push([name[uid], '님이 나갔습니다.'].join(''))
}
}
return answer;
}
4. 마치며
풀고 나서 이 코드보고 감동해버렸다.
분명 나랑 같은 로직인데 자바스크립트 메서드들을 너무 잘쓴거 아니냐구욧 !
function solution(record) {
const userInfo = {};
const action = [];
const stateMapping = {
'Enter': '님이 들어왔습니다.',
'Leave': '님이 나갔습니다.'
}
record.forEach((v) => {
const [state, id, nick] = v.split(' ');
if(state !== "Change") {
action.push([state, id]);
}
if(nick) {
userInfo[id] = nick;
}
})
return action.map(([state, uid]) => {
return `${userInfo[uid]}${stateMapping[state]}`;
})
}
[감동 포인트]
1. 일단 split을 저렇게 한 번에 변수에다가 담을 수 있는지 몰랐고, const를 써도 되겠다. (forEach v마다 const가 갱신되므로)
2. state로 안나누고 nick의 존재 유무에 따라 userInfo를 갱신해주는 것
3. 마지막까지 map을 이용해서 기막히게 출력한 것
'Algorithm > JavaScript' 카테고리의 다른 글
[프로그래머스] 프린터 (0) | 2021.05.08 |
---|---|
[프로그래머스] 멀쩡한 사각형 (0) | 2021.05.08 |
[프로그래머스] 문자열 압축 (0) | 2021.05.07 |
[프로그래머스] 기능개발 (0) | 2021.05.07 |
[프로그래머스] 짝수와 홀수 (0) | 2021.05.07 |