

생각 과정
그냥 단순히 로그를 남기는 건 줄 알고 정말 쉽다고 생각했었는데... 닉네임 바꾸거나 하면 전부 다 변경해야 하는 상황이 생겨서 많이 고생한 문제이다. 누가 시스템을 이렇게 만들어
1. 유저의 이름과 uid를 저장하는 객체를 만들자.
2. 접속 / 나감 메세지를 기록할 배열도 만들자.
3. 객체와 배열을 call-by-reference와 비슷한 방식으로 사용하자.
(JS는 모든 값을 call-by-value 방식으로 처리하지만, 객체와 배열 같은 참조형 데이터는 참조값(reference)를 값으로 전달하기 때문에 가능하다)
function changeLog(userData, userLog) {
for (let i = 0; i < userLog.length; i++) {
const parts = userLog[i].split(" ");
const uid = parts[0];
const action = parts[1];
if (action === "IN") {
userLog[i] = userData[uid] + "님이 들어왔습니다.";
} else if (action === "OUT") {
userLog[i] = userData[uid] + "님이 나갔습니다.";
}
}
}
function enterChat(userCommand, userData, userLog) {
const userID = userCommand[1];
const userName = userCommand[2];
userData[userID] = userName;
userLog.push(userID + " IN");
}
function changeChat(userCommand, userData) {
const userID = userCommand[1];
const userName = userCommand[2];
userData[userID] = userName;
}
function leaveChat(userCommand, userLog) {
const userID = userCommand[1];
userLog.push(userID + " OUT");
}
function solution(record) {
const database = {};
const log = [];
for (let i = 0; i < record.length; i++) {
let newRecord = record[i].split(" ");
if (newRecord[0] === "Enter") enterChat(newRecord, database, log);
if (newRecord[0] === "Change") changeChat(newRecord, database);
if (newRecord[0] === "Leave") leaveChat(newRecord, log);
}
changeLog(database, log);
return log;
}
'문제 풀이 > Programmers' 카테고리의 다른 글
| [프로그래머스] 64065번: 튜플 (JavaScript) (3) | 2025.07.08 |
|---|---|
| [프로그래머스] 67256번: 키패드 누르기 (JavaScript) (0) | 2025.07.08 |
| [프로그래머스] 17682번: 다트 게임 (JavaScript) (0) | 2025.07.04 |
| [프로그래머스] 64061번: 크레인 인형뽑기 게임 (JavaScript) (0) | 2025.07.04 |
| [프로그래머스] 72410번: 신규 아이디 추천 (JavaScript) (0) | 2025.07.04 |