본문 바로가기

코딩테스트/프로그래머스

코딩테스트 연습 2019 KAKAO BLIND RECRUITMENT 오픈채팅방

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

 

프로그래머스

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

programmers.co.kr

SOLUTION

def solution(record):
    answer = []
    rDict = {}
    for r in record:
        rList = r.split(" ")
        if rList[0] == 'Enter':
            rDict[rList[1]] = rList[2]
        elif rList[0] == 'Change':
            rDict[rList[1]] = rList[2]
        else:
            pass
        # print(rList)
        
    for r in record:
        rList = r.split(" ")
        if rList[0] == 'Enter':
            # print(rDict[rList[1]])
            answer.append(rDict[rList[1]]+"님이 들어왔습니다.")
        elif rList[0] == 'Leave':
            answer.append(rDict[rList[1]]+"님이 나갔습니다.")
    # print(rDict)
    return answer
이 문제는 카카오톡 오픈 채팅방에서 유저들의 입장, 퇴장, 닉네임 변경 기록이 주어지고, 이를 처리하여 최종적으로 방을 개설한 사람이 볼 수 있는 메시지를 출력하는 문제입니다.
문제에서는 채팅방에 유저가 입장하면 "[닉네임]님이 들어왔습니다." 메시지가 출력되고, 퇴장하면 "[닉네임]님이 나갔습니다." 메시지가 출력된다고 설명되어 있습니다. 닉네임 변경은 채팅방 메시지의 닉네임을 전부 변경한다고 합니다.
문제를 해결하기 위해서는 주어진 기록을 순차적으로 처리하면서 채팅방에 유저들이 입장하고 퇴장한 기록을 관리해야 합니다. 또한, 닉네임 변경이 발생하면 이전에 출력된 메시지의 닉네임도 변경해야 합니다.
입력으로 주어진 기록을 한 줄씩 처리하면서 유저들의 상태를 관리하고, 최종적으로 출력할 메시지를 생성하는 방식으로 문제를 해결할 수 있습니다. 이를 위해 적절한 자료구조를 사용하여 유저들과 관련 정보를 저장하고 업데이트해야 합니다.

카카오 문제이길래 겁부터 났지만 딕셔너리만 제대로 활용할 줄 안다면 손쉽게 풀리는 문제였습니다. 아마 리스트로 풀었더라면 효율성테스트에서 큰 손해를보고 헤멨을 가능성이 높았지만, 이전 코딩테스트 문제에서 딕셔너리에 대한 이해를 바탕으로 깔고 가니 10분 이내로 어렵지 않게 풀 수 있었습니다.

딕셔너리  = 짱!