반응형

문제 설명

전체 문제는 프로그래머스에 있습니다.

 

출처: 프로그래머스

 

 

제한 사항

 

 

 

풀이

문제를 본 나의 생각

 

  • 먼저, 닉네임을 변경하기 전 상태에서 입장, 퇴장 문자열 배열을 그대로 만든다.
    이때, 닉네임은 변경 가능성이 있기 때문에 *닉네임*으로 구분한다.
  • 유저 아이디(key): 변경 닉네임(value)을 가진 Map을 만든다.
  • 변경 히스토리 Map을 참고하여 최초에 만들어진 문자열 배열을 순환하며 최종적으로 치환해준다. 

 

소스 코드

function solution(record) {
    var answer = [], changeMap = new Map(), regx = new RegExp("\\*.*?\\*", "g");
    
    record.forEach((v) => {
        const list = v.split(" ");
        if(list[0] == "Enter") {
            answer.push([`*${list[2]}*님이 들어왔습니다.`, list[1]]);
            changeMap.set(list[1], list[2]);
        } else if(list[0] == "Change") {
            changeMap.set(list[1], list[2]);
        } else {
            answer.push([`*${changeMap.get(list[1])}*님이 나갔습니다.`, list[1]]);
        }
    });
    
    answer = answer.map((v) => {
        return v[0].replace(regx, changeMap.get(v[1]));
    });
    
    return answer;
}

 

반응형