본문 바로가기
Engineering WIKI/Programmers

[프로그래머스] 오픈채팅방

by wonos 2022. 5. 2.
 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

내풀이 (1차 실패)

def solution(record):
    id_dic = {}
    answer = []
    
    for change in record:
        id_dic[change.split()[1]] = change.split()[-1]
    
    for message in record:
        if "Enter" in message:
            answer.append(id_dic[message.split()[1]] + "님이 들어왔습니다.")
        elif "Leave" in message:
            answer.append(id_dic[message.split()[1]] + "님이 나갔습니다.")
        else:
            continue
    return answer

내풀이 (2차 성공)

def solution(record):
    id_dic = {}
    answer = []
    
    for change in record:
        if len(change.split()) == 3:
            id_dic[change.split()[1]] = change.split()[-1]
    
    for message in record:
        if "Enter" == message.split()[0]:
            answer.append(id_dic[message.split()[1]] + "님이 들어왔습니다.")
        elif "Leave" == message.split()[0]:
            answer.append(id_dic[message.split()[1]] + "님이 나갔습니다.")
    return answer

다른방법 1

def solution(record):
    result = []
    info = {}
    for r in record:
        r = r.split()
        #들어온 경우
        if r[0] == "Enter":
            result.append([r[1], "님이 들어왔습니다."])
            info[r[1]] = r[2]
        #나간경우
        elif r[0] == "Leave":
            result.append([r[1], "님이 나갔습니다."])
        #변경된 경우
        else:
            info[r[1]] = r[2]
    result = list(map(lambda x : info[x[0]]+x[1], result))
    return result