-
[프로그래머스] 오픈채팅방Algorithm/자료구조 2021. 10. 1. 12:55728x90
문제 : https://programmers.co.kr/learn/courses/30/lessons/42888?language=javascript
- record의 길이는 100,000이기 때문에, O(NlogN)이하의 알고리즘을 구현해야 한다.
- hash를 이용하면 쉽게 풀 수 있는 문제이다. (설명이 길어서 살짝 쫄았다..)
- 자바스크립트는 Map 생성자를 통해 hash를 구현할 수 있다.
function solution(record) { var answer = []; const hash = new Map() for(let str of record){ const [ action, id, nickname] = str.split(' ') if(action === 'Enter' || action === 'Change'){ hash.set(id, nickname) } } for(let str of record){ const [action, id, nickname] = str.split(' ') if(action === 'Enter'){ answer.push(`${hash.get(id)}님이 들어왔습니다.`) } else if(action === 'Leave') { answer.push(`${hash.get(id)}님이 나갔습니다.`) } } return answer; }
- hash의 키 값은 유저의 ID, value는 nickname으로 설정을 해 준다.
- 닉네임을 바꾸는 경우는 Enter, Change 2가지 경우이므로, 이 액션들을 취할 때 마다 hash값을 변경 해 주면 된다.
- 이후, 한 번 더 record를 순환하면서 id에 맞는 nickname을 활용하여 answer에 push 해 주면 된다.
- 자바스크립트 ES6 문법인 destructuring(구조 분해 할당) + template 문자열 문법을 사용하면 코드를 더 줄일 수 있다.
'Algorithm > 자료구조' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 (0) 2021.09.30 [Codility - Counting Elements] Brackets (0) 2021.09.20 [Codility - Counting Elements] frog_river_one (0) 2021.09.17 [Codility - Arrays] OddOccurrencesInArray (0) 2021.09.16