728x90
[Javascript] (프로그래머스 level 2) 오픈채팅방
💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.
내 풀이
function solution(record) {
// command에 기록을나눠서 저장 (편하게)
const command = record.map((x) => x.split(' '));
const idNick = new Map(); // userMap = {id, nick}
const idLastLeave = new Map(); // idLastLeave = {id, lastLeave}
for (let [com, id, nick] of command) {
// id 기록 없으면 추가 (닉, 마지막 나간 인덱스)
if (com === "Enter") {
idNick.set(id, nick);
idLastLeave.set(id, -1);
} else if (com === "Leave") {
idLastLeave.set(id, 1);
} else if (com === "Change") {
idNick.set(id, nick);
}//35분 지났고, 밥먹으로감
}
const result = [];
command.forEach((x) => {
if (x[0] === "Enter") {
result.push(`${idNick.get(x[1])}님이 들어왔습니다.`);
} else if (x[0] === "Leave") {
result.push(`${idNick.get(x[1])}님이 나갔습니다.`);
}})
return result
}
다른 사람 풀이
function solution(record) {
const userInfo = {};
const action = [];
const stateMapping = {
'Enter': '님이 들어왔습니다.',
'Leave': '님이 나갔습니다.'
}
record.forEach((v) => {
const [state, id, nick] = v.split(' ');
if(state !== "Change") {
action.push([state, id]);
}
if(nick) {
userInfo[id] = nick;
}
})
return action.map(([state, uid]) => {
return `${userInfo[uid]}${stateMapping[state]}`;
})
}
배운 점, 느낀 점
처음에 문제를 잘못 이해해서 쓸데없이 훨씬 더 많은 요구사항을 만족시키고자 노력했다. 근 50분간 그렇게 구현하다. 자꾸 “맞왜틀” 하다가 문제를 다시 읽어보니 예외케이스가 없다는걸 알게되었다. 그리고 예외처리를 모두 빼니 맞더라 하.. 🤣🤣
ㄹ처음으로 풀어보는 프로그래머스 레벨2 문제라 뭔가 엄~청 어려울거라고 생각했던게 패배요인인것같다. 오히려 레벨1 문제보다 쉬웠다.
if else if 진짜 보기 안좋다. ㅋㅋ 다른 사람풀이를 통해 object로 switch문처럼 사용할수 있다는걸 배웠다.
풀이 시간
- 55분 걸렸다. 문제를 꼼꼼히 잘 읽어야겠다.
'Coding Test > JavaScript' 카테고리의 다른 글
[Javascript] (프로그래머스 level 2) n진수 게임 (0) | 2022.07.01 |
---|---|
[Javascript] (프로그래머스 level 2) 다음 큰 숫자 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 2) 최댓값과 최솟값 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 2) JadenCase 문자열 만들기 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 1) 크레인 인형뽑기 게임 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 1) 키패드 누르기 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 1) 내적 (0) | 2022.07.01 |
[Javascript] (프로그래머스 level 1) 모의고사 (0) | 2022.06.30 |
댓글