Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 야놀자
- LinkSnap
- github
- js
- 호이스팅
- 코테
- 컴퓨터과학
- 패스트캠퍼스
- CSS
- KAKAO
- 알고리즘
- 자바스크립트
- BFS
- cpu
- html/css/js
- 국비지원취업
- nodejs
- 그리디
- 프론트엔드개발자
- 코딩테스트
- 백준
- CS
- 컴퓨터공학
- 부트캠프
- DFS
- computerscience
- 국비지원
- 너비우선탐색
- git
- Javascript
Archives
- Today
- Total
My Boundary As Much As I Experienced
(KAKAO BLIND RECRUITMENT) 오픈채팅방 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42888
문제 수준:
레벨2
입출력 예 (입력 / 출력):
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"] | ["Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."] |
문제 요약:
사용자가 할 수 있는 액션:
1. 사용자는 원하는 닉네임으로 입장할 수 있다.
2. 사용자는 입장 후 원하는 닉네임으로 변경할 수 있다.
3. 사용자는 퇴장할 수 있다.
4. 닉네임은 중복될 수 있다.
이 조건을 가지고 불특정 다수가 채팅할 수 있는 앱을 만들 때, 입장 메시지와 퇴장 메시지를 출력해야 된다.
이 메시지들은 닉네임을 변경할 시 메시지도 같이 바뀐다.
문제 풀이 전략
닉네임을 변경하거나, 중복이 가능하므로 입/퇴장때의 이름을 고유한 값으로 쓸 수 없다.
UID를 기준으로 가장 최근의 닉네임을 객체에 저장하여 메시지를 표출할 때만 아이디를 닉네임으로 변환하려 한다.
내 풀이:
function solution(record) {
const current = {} //마지막으로 변경된 닉네임을 아이디(고유값) : 닉네임(중복 가능한 값) 꼴로 저장한다.
const enterLine = "님이 들어왔습니다."
const leaveLine = "님이 나갔습니다."
const temp = [] //[아이디, 행동]꼴로 log를 저장하는 곳.
const result = [] //문제에서 요구한대로 배열 형태로 return해야되기 때문에 포맷에 맞춰 정제한 배열
for (let i = 0; i < record.length; i++){
const spl = record[i].split(" ") //입력값을 스페이스를 기준으로 나눈다.
if (spl[0] !== "Leave"){ // 액션이 Leave가 아닐때만,
current[spl[1]] = spl[2]
/* current 객체에 '아이디 : 닉네임'으로 업데이트 한다.
Leave할 때는 닉네임이 데이터에 제공되지 않기 때문에 하지 않는다..*/
}
if (spl[0] === "Change") {
continue //단순 닉네임 변경일 때는 들어오기/나가기 메시지에 업데이트하지 않고 continue
} else
if (spl[0] === "Enter") { // 유저가 들어온 경우이면
temp.push([spl[1] , enterLine]) // [아이디, 입장 메시지] 꼴로 temp에 저장한다.
} else { // 유저가 나간 경우는
temp.push([spl[1] , leaveLine]) // [아이디, 퇴장 메시지] 꼴로 temp에 저장한다.
}
}
temp.forEach( list => {
result.push(current[list[0]] + list[1])
//아이디로 최근 닉네임을 객체에서 가져와 입/퇴장 메시지와 조립하여 result에 넣는다.
})
return result //result를 반환
}
오픈채팅을 평소에 많이 사용해봐서(그림방, 코딩방) 메커니즘을 이해하는데에 어려움은 없었다.
'Algorithm > Coding Test' 카테고리의 다른 글
좋은 단어 (백준 코딩테스트 3986번, 스택(stack), NodeJS 풀이) (0) | 2023.08.03 |
---|---|
유기농 배추 (백준 코딩테스트 1012번, DFS/BFS, NodeJS 풀이) (0) | 2023.07.21 |
(2022 KAKAO BLIND RECRUITMENT) 주차 요금 계산 (0) | 2023.07.19 |
숫자 카드 2 (백준 코딩테스트 10816번, 파라메트릭 서치, Node.JS 풀이) (0) | 2023.07.17 |
(KAKAO BLIND RECRUITMENT) N진수 게임 (0) | 2023.07.15 |