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 |
Tags
- sort
- BOJ
- 코딩테스트
- JS
- 기술면접
- hash
- 연결리스트
- 정규표현식
- 병합 정렬
- 알고리즘
- 브루트포스
- CSS
- 자바스크립트
- JavaScript
- 백준
- 코테
- 리액트
- 프로그래머스
- 완전탐색
- useState
- state
- node.js
- 딥다이브
- 해시
- react
- Node
- 자료구조
- 합병 정렬
- 최소공배수
- 정렬
Archives
- Today
- Total
가치투자자
[프로그래머스] 오픈채팅방 본문
728x90
반응형
Programmers : 오픈채팅방
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42888
</> 이 글은 코딩테스트 대비와 알고리즘 공부를 위해 문제를 풀고 학습한 내용을 기록한 것입니다. 틀린 부분이나 추가해야 할 부분이 있다면 언제든 댓글로 남겨주세요❗️
💬 문제
유저 아이디와 닉네임이 서로 한 쌍이고, 유저 아이디를 활용해 닉네임을 변경할 수 있다는 것만 파악하면 쉽게 풀 수 있는 문제였다.
- 오픈채팅방에서 닉네임을 바꾸는 방법은 2가지다. 닉네임을 변경하면 기존 메시지의 닉네임도 변경된다.
- 채팅방을 나간 후, 새로운 닉네임으로 다시 들어온다
- 채팅방에서 닉네임을 변경한다 - 중복된 닉네임을 사용할 수 있다.
- 그렇기에 모든 유저는 [유저 아이디]로 구분한다 - 입장, 퇴장, 변경에 대한 기록 record 메시지는 다음과 같이 주어진다.
- 입장 : "Enter [유저 아이디] [닉네임]"
- 퇴장 : "Leave [유저 아이디]"
- 변경 : "Change [유저 아이디] [닉네임]" - 입장, 퇴장시 다음과 같은 메시지가 출력되며, 최종적으로 보게 될 메시지를 배열 형태로 출력해주면 된다.
- 입장 : "[닉네임]님이 들어왔습니다."
- 퇴장 : "[닉네임]님이 나갔습니다."
728x90
💡 입출력 예시
처음에는 Muzi(uid1234)가 들어왔고, 그 다음으로 Prodo(uid4567)가 들어왔다.
그리고 Muzi(uid1234)가 퇴장하고, Prodo라는 닉네임으로 바꿔서 uid1234가 들어왔다.
마지막으로, uid4567이 닉네임을 Ryan으로 변경했다.
최종적으로, uid1234의 닉네임은 Prodo이고, uid4567의 닉네임은 Ryan이다.
이전 입장/퇴장 메시지의 닉네임을 최종 닉네임으로 바꿔주면 된다.
반응형
🔑 풀이1 : 객체
유저의 닉네임을 변경하기 위해 객체를 활용했다.
유저 아이디를 객체의 key값으로, 닉네임을 value값으로 설정했다.
- 유저 정보를 받아와 명령어(command), 유저 아이디(uid), 닉네임(nickname)으로 구조분해할당을 해준다.
- 명령어
1) 입장(Enter) : 유저정보(userInfo)에 uid와 nickname을 key와 value로 넣어준다
- 입장 메시지 "uid님이 들어왔습니다"를 배열 ans에 넣어준다
2) 변경(Change) : 해당 uid의 value값을 새로운 닉네임으로 바꿔준다
3) 퇴장(Leave) : "uid님이 나갔습니다"를 배열 ans에 넣어준다 - 현재까지는 아이디로 입장/퇴장 메시지가 저장된 상태이다.
- 각 유저 아이디를 최종 닉네임으로 변경해주고, 최종 메세지 배열을 출력해준다
function solution(record) {
const userInfo = {};
const ans = [];
// 유저 정보
record.map((item) => {
const [command, uid, nickname] = item.split(' ');
if (command === 'Enter') {
userInfo[uid] = nickname;
ans.push(`${uid}님이 들어왔습니다.`);
} else if (command === 'Change') {
userInfo[uid] = nickname;
} else if (command === 'Leave') {
ans.push(`${uid}님이 나갔습니다.`);
}
});
// 입장, 퇴장 기록
for (let i=0; i < ans.length; i++) {
let uid = ans[i].split('님')[0];
ans[i] = ans[i].replace(uid, userInfo[uid]);
}
return ans;
}
실행 결과와 채점 결과는 다음과 같다.
728x90
반응형
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 주차 요금 계산 (0) | 2023.07.13 |
---|---|
[프로그래머스] n진수 게임 (0) | 2023.07.12 |
[프로그래머스] 다트 게임 (0) | 2023.07.06 |
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2023.07.05 |
[프로그래머스] 실패율 (0) | 2023.06.29 |