[프로그래머스] 오픈채팅방 _ 2019 KAKAO BLIND RECRUITMENT 문제 풀이



1. 문제

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

2. 풀이

2.1. 나의 풀이

def solution(record):
    answer = []
    dict = {}
    nick_dict = {}
    ans_i = 0
    for rec in record:
        if rec.split()[0] != 'Leave':
            work, uid, nickname = rec.split()
        else:
            work, uid = rec.split()
            
        if work == 'Enter':
            if uid not in dict:
                dict[uid] = []
            dict[uid].append(ans_i)
            answer.append('E')
            ans_i += 1
            nick_dict[uid] = nickname
        elif work == 'Leave':
            dict[uid].append(ans_i)
            answer.append('L')
            ans_i += 1
        elif work == 'Change':
            nick_dict[uid] = nickname

    for key in dict:
        for i in dict[key]:
            if answer[i] == 'E':
                answer[i] = nick_dict[key] + "님이 들어왔습니다."
            else:
                answer[i] = nick_dict[key] + "님이 나갔습니다."

    return answer 

2.2. 숏코딩

먼저 닉네임을 갱신하고 나서 들어오고 나가는 여부만 확인하고 최종 닉네임으로 정답을 출력합니다.

## - , 이동규 , - , 김명환 , 우지호 외 4 명 님의 소스 코드
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