본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬 / 자바스크립트] 오픈채팅방(2019 KAKAO BLIND RECRUITMENT/ level 2)

by 청량리 물냉면 2023. 3. 6.
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/42888 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🐍파이썬
def solution(record):
    answer = []
    dic = {}
    for i in record:
        arr = i.split()
        if arr[0] == "Enter" or arr[0] == "Change":
            dic[arr[1]] = arr[2]
    for i in record:
        arr = i.split()
        if arr[0] == "Enter":
            answer.append(dic[arr[1]]+"님이 들어왔습니다.")
        elif arr[0] == "Leave":
            answer.append(dic[arr[1]]+"님이 나갔습니다.")
    return answer

 

 

다른 풀이 방법

def solution(record):
    answer = []
    namespace = {}
    printer = {'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
    for r in record:
        rr = r.split(' ')
        if rr[0] in ['Enter', 'Change']:
            namespace[rr[1]] = rr[2]
    for r in record:
        if r.split(' ')[0] != 'Change':
            answer.append(namespace[r.split(' ')[1]] + printer[r.split(' ')[0]])
    return answer

11번줄: Enter, Leave도 사용자의 이름처럼 딕셔너리에 저장해 출력하였다.

 

 

🐥자바스크립트
function solution(record) {
    var answer = [];
    let userId = {};
    let status = {"Enter":"님이 들어왔습니다.", "Leave":"님이 나갔습니다."};
    for(let i of record){
        const arr = i.split(' ');
        if(arr[0] === "Enter" || arr[0] === "Change"){
            userId[arr[1]] = arr[2];
        }
    }
    for(let i of record){
        const arr = i.split(' ');
        if(arr[0] !== "Change"){
            answer.push(userId[arr[1]]+status[arr[0]]);
        }
    }
    return answer;
}

위 파이썬 풀이를 참고하여 Enter, Leave일 때 출력할 메시지를 딕셔너리에 담아 상황에 따라 출력했다.

 

 

다른 풀이 방법

function solution(record) {
    const userInfo = {};
    const action = [];
    const stateMapping = {
        'Enter': '님이 들어왔습니다.',
        'Leave': '님이 나갔습니다.'
    }
    record.forEach((v) => {
        const [state, id, nick] = v.split(' '); //nick이 존재하지 않으면 nick = undefined
        if(state !== "Change") {
            action.push([state, id]);   //Enter,Leave와 사용자id를 함께 배열에 저장
        }
        if(nick) {  //nick이 undefined가 아니라면 딕셔너리에 (사용자id:이름)을 추가
            userInfo[id] = nick;
        }
    })
    return action.map(([state, uid]) => {
        return `${userInfo[uid]}${stateMapping[state]}`;    //state, uid 딕셔너리를 이용해 상황에 알맞은 메시지를 출력한 배열을 리턴
    })
}
반응형