[알고리즘] 오픈채팅방 & new Map에 관해

강인호·2022년 9월 4일
0

알고리즘 문제풀이

목록 보기
25/40


처음의 접근은 일단 각각의 인자들을 map으로 돌면서 공백을 기준으로 쪼갠다.
그 후 쪼갠인자의 0번째인자가 Enter나 Leave 면 문구를 배열에 push하고
Change인 경우에는 닉네임을 변경하는 식으로 접근을 해보았으나
해당id와 그 아이디가 사용하는 닉네임을 엮어야 했고, 맵을 돌면서 1번째인자와 2번째인자를
각각 빈 배열에 푸쉬하는 식으로 접근을 했으나 change단계에서 막히고 여러 시행착오를 겪다가

결국에 내가 필요한 기능은
특정아이디와 그 아이디가 사용하는 닉네임이 한몸처럼 엮인 그러한 자료,
change로 닉네임을 변경하더라도 추가하고 삭제하거나 하는 과정없이 그냥 덮어씌울수 있는 자료

가 필요했고 찾아보던중에 new Map 이라는 자료구조가 내가 원하는 기능과 완전히 일치한다는 것을 알았고 사용했다.

각 코드를 살펴보자면

let uids=new Map(); Map을 정의한다 맵에는 key:value형식으로 값이 담기며 키는 중복이 불가능하다.

result.map((item)=>item[0]==="Enter" || item[0]==="Change" ? uids.set(item[1],item[2]) : null)

각각의 맵을 돌면서 enter나 change일때 map에 ( id(key),nickname(value) ) 형식으로 set한다.
앞에 값이 있어도 뒤에 set과정에서 value가 덮어씌워지기때문에 닉네임 변경처리도 가능하다.
이러한 과정을 거치면 Map 안에는 해당유저가 마지막으로 어떤닉네임을 설정한채로 남아있는지에 대한 정보가 담겨있다.

그다음 또 map을 돌려서 Enter일때, Leave 일때 해당 유저가 사용하는 닉네임을 get으로 불러와서
그에 맞는 문자열을 answer배열에 push 해주면 된다.

0개의 댓글