문제
프로그래머스 2019 KAKAO BLIND RECRUITMENT 오픈채팅방
https://programmers.co.kr/learn/courses/30/lessons/42888
언어
자바스크립트(JavaScript)
접근방법
- aciontList은 Action은 유저 행동, Id는 유저 아이디인 객체로 이루어진 배열이다. nickObj은 유저 아이디를 key, 유저의 최근 닉네임을 value로 가지는 객체이다.
- record를 차례로 탐색한다.
- 행동이 Enter면 닉네임을 변경해야 하므로 nickObj에서 현재 유저의 아이디를 key로 하는 객체를 찾아 value를 들어올 때의 닉네임으로 업데이트한다. 또한 actionList에 Action은 유저행동, Id는 유저 아이디인 객체를 삽입한다.
- 행동이 Leave면 닉네임을 변경할 필요가 없다. actionList에 Action은 유저행동, Id는 유저 아이디인 객체를 삽입한다.
- 행동이 Change면 닉네임만 변경한다. nickObj에서 현재 유저의 아이디를 key로하는 객체를 찾아 value를 변경할 닉네임으로 업데이트한다
- 결과를 출력한다.
코드
function solution(record) {
let answer = [];
let actionList = [];
let nickObj = {};
for (let i=0; i<record.length; i++){
let input = record[i].split(" ");
if (input[0] ==='Enter'){
// 닉네임 변경
nickObj[input[1]] = input[2];
// 들어온 행동 추가
actionList.push({Action:input[0],Id:input[1]});
}else if(input[0] ==='Leave'){
// 나간 행동 추가
actionList.push({Action:input[0],Id:input[1]});
}else{
// 닉네임 변경
nickObj[input[1]] = input[2];
}
}
// 결과 출력
for (let i=0; i<actionList.length; i++){
if (actionList[i].Action === 'Enter'){
answer.push(`${nickObj[actionList[i].Id]}님이 들어왔습니다.`);
}else{
answer.push(`${nickObj[actionList[i].Id]}님이 나갔습니다.`);
}
}
return answer;
}
복기
- 닉네임 데이터는 객체에, 행동 데이터는 배열에 따로 관리하지 않으면 문제가 복잡해진다. 이를 먼저 생각하지 않고 문제부터 바로 풀면 안 된다.
- 다행히 미리 다 생각하고 풀어서 헤매지는 않았다.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
알고리즘 복잡도와 빅 오 표기법 (0) | 2020.06.20 |
---|---|
[프로그래머스] [3차] n진수 게임 (0) | 2020.06.11 |
[프로그래머스] [1차] 캐시 (0) | 2020.06.09 |
[프로그래머스] [1차] 프렌즈4블록 (0) | 2020.06.09 |
[프로그래머스] [1차] 뉴스 클러스터링 (JavaScript) (0) | 2020.06.07 |