[JS] 프로그래머스_오픈채팅방

응다다·2021년 8월 20일
0

Algorithm_JS

목록 보기
1/2
post-thumbnail

1. 코드

1) 객체로 구현 -> 시간초과

function solution(record) {
  var answer = [];
  var idNameList = [];
  var idObj = function(id, name){ 
    this.id = id; 
    this.name = name; 
  }

  for(var value of record){
    let words = value.split(" ");
    let index = idNameList.findIndex((item => item.id === words[1]));
    if(value.startsWith("Enter")){
        idNameList[index].name = words[2];
        answer.push(words[1] + "님이 들어왔습니다.");
      } else{
        var selfObj = new idObj(words[1], words[2]);
        idNameList.push(selfObj);
        answer.push(words[1] + "님이 들어왔습니다.");
      }
    } else if(value.startsWith("Leave")){
      answer.push(words[1] + "님이 나갔습니다.")
    } else if(value.startsWith("Change")){
      idNameList[index].name = words[2];
    }
  }

  var realAnswer = [];
  for (var value of answer){
    var answerWords = value.split("님이");
    let index = idNameList.findIndex((item => item.id === answerWords[0]));
    realAnswer.push(idNameList[index].name + "님이 " + answerWords[1]);
  }

  return realAnswer;
}

2) Map으로 구현 -> 통과

function solution(record) {
  var answer = [];
  var idNameMap = new Map();

  for(var value of record){
    let words = value.split(" ");
    if(value.startsWith("Enter")){
      if(idNameMap.has(words[1])){
        idNameMap.set(words[1], words[2]);
        answer.push(words[1] + "님이 들어왔습니다.");
      } else{
        idNameMap.set(words[1], words[2]);
        answer.push(words[1] + "님이 들어왔습니다.");
      }
    } else if(value.startsWith("Leave")){
      answer.push(words[1] + "님이 나갔습니다.")
    } else if(value.startsWith("Change")){
      idNameMap.set(words[1], words[2]);
    }
  }

  var realAnswer = [];
  for (var value of answer){
    var answerWords = value.split("님이");
    realAnswer.push(idNameMap.get(answerWords[0]) + "님이" + answerWords[1]);
  }

  return realAnswer;
}

2. 내 생각

  • 객체구조를 사용한 이유
    'id:name' 형태를 가진 튜플 구조 리스트가 있어야 된다고 생각했다. 그래서 객체 구조를 만들었다. 그러나 해당 객체에서 특정 id를 찾을때 사용한 'findIndex'를 사용하면서 효율성이 떨어진 것 같다.
  • Map을 사용한 이유
    튜플형태를 가질 수 있는 형태이기 때문에 사용했다. 'has'를 통해서 id를 찾았다.

찾아보니 무조건 Map이 성능이 좋다라고 할 수는 없고 경우에 따라 Object와 Map 둘 중 하나를 사용하면 되는 것 같다.
아래 블로그에서 보기 좋게 정리해주었다.
https://kellis.tistory.com/129

0개의 댓글