⚡문제정보

너무 긴 문제입니다. 요약하자면

중요한 것만 보면 이렇습니다.
스페이스로 구분된 문자열이 담긴 배열이 주어집니다.
Enter, Leave , Change로 구성되어있는데
만약 닉네임이 바뀌었다면 모든 내역이 바뀐 아이디로 표시되어야합니다.
닉네임은 Change를 하거나
나갔다가 새로 들어올때 닉네임을 수정한 경우 바뀝니다.
🙄제한사항
record는 다음과 같은 문자열이 담긴 배열이다
길이는 1 이상 100,000 이하이다.
다음은 record에 담긴 문자열에 대한 설명이다.
모든 유저는 [유저 아이디]로 구분한다.
[유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]" (ex. "Enter uid1234 Muzi")[유저 아이디] 사용자가 채팅방에서 퇴장 - "Leave [유저 아이디]" (ex. "Leave uid1234")[유저 아이디] 사용자가 닉네임을 [닉네임]으로 변경 - "Change [유저 아이디] [닉네임]" (ex. "Change uid1234 Muzi")
첫 단어는 Enter, Leave, Change 중 하나이다.
각 단어는 공백으로 구분되어 있으며, 알파벳 대문자, 소문자, 숫자로만 이루어져있다.
유저 아이디와 닉네임은 알파벳 대문자, 소문자를 구별한다.
유저 아이디와 닉네임의 길이는 1 이상 10 이하이다.
채팅방에서 나간 유저가 닉네임을 변경하는 등 잘못 된 입력은 주어지지 않는다.
🔍접근방법
배열의 뒤에서부터 접근하면서
닉네임을 change한 경우 혹은 Enter한 경우 키에 아이디 밸류에 닉네임을 담아준다.
맨 마지막 변경만 알고있으면 되니까 한번 값이 들어간 경우 값을 기억해준다.
🔍나의 풀이
function solution(record) {
let map = new Map()
let answer = []
for(i= record.length-1 ; i>=0 ; i--) {
let spliter = record[i].split(' ')
if( spliter[0] !== "Leave" && !map.has(spliter[1]) ){
map.set(spliter[1], spliter[2]);
}
}
for(i=0; i< record.length ; i++) {
let spliter = record[i].split(' ')
if(spliter[0] == "Enter") {
answer.push(`${map.get(spliter[1])}님이 들어왔습니다.`)
}
else if(spliter[0] == "Leave") {
answer.push(`${map.get(spliter[1])}님이 나갔습니다.`)
}
}
return answer
}
설명은 아래에 서술합니다.
function solution(record) {
let map = new Map()
// 아이디 닉네임을 저장할 map
let answer = []
// 정답을 넣을 배열
for(i= record.length-1 ; i>=0 ; i--) {
let spliter = record[i].split(' ')
if( spliter[0] !== "Leave" && !map.has(spliter[1]) ){
map.set(spliter[1], spliter[2]);
}
}
/*
record 배열의 뒤부터 접근해서 아이디 닉네임 정보를 map에 담기
*/
for(i=0; i< record.length ; i++) {
let spliter = record[i].split(' ')
if(spliter[0] == "Enter") {
answer.push(`${map.get(spliter[1])}님이 들어왔습니다.`)
}
else if(spliter[0] == "Leave") {
answer.push(`${map.get(spliter[1])}님이 나갔습니다.`)
}
}
// 각 케이스에 맞게.. 닉네임과 들어옴,나감을 answer에 push
return answer
}
🔍다른 사람의 풀이
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]}`;
})
}
이런게 구조분해할당...?
ㄷㄷ
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 2] 영어 끝말잇기 Javascript (0) | 2022.12.25 |
---|---|
[Programmers Level 1] 크기가 작은 부분 문자열 Javascript (0) | 2022.12.25 |
[Programmers Level 1] 성격 유형 검사하기 Javascript (0) | 2022.12.20 |
[Programmers Level 0] 가장 가까운 같은 글자 Javascript (0) | 2022.12.17 |
[Programmers Level 1 탐욕법] 체육복 Javascript (0) | 2022.12.16 |
⚡문제정보

너무 긴 문제입니다. 요약하자면

중요한 것만 보면 이렇습니다.
스페이스로 구분된 문자열이 담긴 배열이 주어집니다.
Enter, Leave , Change로 구성되어있는데
만약 닉네임이 바뀌었다면 모든 내역이 바뀐 아이디로 표시되어야합니다.
닉네임은 Change를 하거나
나갔다가 새로 들어올때 닉네임을 수정한 경우 바뀝니다.
🙄제한사항
record는 다음과 같은 문자열이 담긴 배열이다
길이는 1 이상 100,000 이하이다.
다음은 record에 담긴 문자열에 대한 설명이다.
모든 유저는 [유저 아이디]로 구분한다.
[유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]" (ex. "Enter uid1234 Muzi")[유저 아이디] 사용자가 채팅방에서 퇴장 - "Leave [유저 아이디]" (ex. "Leave uid1234")[유저 아이디] 사용자가 닉네임을 [닉네임]으로 변경 - "Change [유저 아이디] [닉네임]" (ex. "Change uid1234 Muzi")
첫 단어는 Enter, Leave, Change 중 하나이다.
각 단어는 공백으로 구분되어 있으며, 알파벳 대문자, 소문자, 숫자로만 이루어져있다.
유저 아이디와 닉네임은 알파벳 대문자, 소문자를 구별한다.
유저 아이디와 닉네임의 길이는 1 이상 10 이하이다.
채팅방에서 나간 유저가 닉네임을 변경하는 등 잘못 된 입력은 주어지지 않는다.
🔍접근방법
배열의 뒤에서부터 접근하면서
닉네임을 change한 경우 혹은 Enter한 경우 키에 아이디 밸류에 닉네임을 담아준다.
맨 마지막 변경만 알고있으면 되니까 한번 값이 들어간 경우 값을 기억해준다.
🔍나의 풀이
function solution(record) {
let map = new Map()
let answer = []
for(i= record.length-1 ; i>=0 ; i--) {
let spliter = record[i].split(' ')
if( spliter[0] !== "Leave" && !map.has(spliter[1]) ){
map.set(spliter[1], spliter[2]);
}
}
for(i=0; i< record.length ; i++) {
let spliter = record[i].split(' ')
if(spliter[0] == "Enter") {
answer.push(`${map.get(spliter[1])}님이 들어왔습니다.`)
}
else if(spliter[0] == "Leave") {
answer.push(`${map.get(spliter[1])}님이 나갔습니다.`)
}
}
return answer
}
설명은 아래에 서술합니다.
function solution(record) {
let map = new Map()
// 아이디 닉네임을 저장할 map
let answer = []
// 정답을 넣을 배열
for(i= record.length-1 ; i>=0 ; i--) {
let spliter = record[i].split(' ')
if( spliter[0] !== "Leave" && !map.has(spliter[1]) ){
map.set(spliter[1], spliter[2]);
}
}
/*
record 배열의 뒤부터 접근해서 아이디 닉네임 정보를 map에 담기
*/
for(i=0; i< record.length ; i++) {
let spliter = record[i].split(' ')
if(spliter[0] == "Enter") {
answer.push(`${map.get(spliter[1])}님이 들어왔습니다.`)
}
else if(spliter[0] == "Leave") {
answer.push(`${map.get(spliter[1])}님이 나갔습니다.`)
}
}
// 각 케이스에 맞게.. 닉네임과 들어옴,나감을 answer에 push
return answer
}
🔍다른 사람의 풀이
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]}`;
})
}
이런게 구조분해할당...?
ㄷㄷ
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 2] 영어 끝말잇기 Javascript (0) | 2022.12.25 |
---|---|
[Programmers Level 1] 크기가 작은 부분 문자열 Javascript (0) | 2022.12.25 |
[Programmers Level 1] 성격 유형 검사하기 Javascript (0) | 2022.12.20 |
[Programmers Level 0] 가장 가까운 같은 글자 Javascript (0) | 2022.12.17 |
[Programmers Level 1 탐욕법] 체육복 Javascript (0) | 2022.12.16 |