[알고리즘] 오픈채팅방

MINSEOK KIM·2021년 8월 19일
1

알고리즘

목록 보기
3/12

프로그래머스 2019 KAKAO BLIND RECRUITMENT 코딩테스트에서 출제된 문제

오픈채팅방 문제

분석

record: ["Enter uid1234 Muzi", "Change uid1234 Ryan"]
result: ["Ryan님이 들어왔습니다."]

기록을 모두 받고 출력을 최종으로 하는 방식이다. 앞의 유저 닉네임 변경이 어떻게 되는지에 따라서 최종 출력이 달라지는 부분을 신경 쓰면 된다.


1. dict로 저장

  • 입장에서는 dict에 새로운 유저 아이디와 닉네임을 저장
    member["아이디"] = "닉네임"
  • 퇴장에서는 로그 기록만 진행한다. (member의 데이터를 변경, 참조할 상황이 없다)
  • 닉네임이 변경되면 dict에 저장된 유저의 아이디를 통해서 찾고 유저 닉네임을 변경한다.
    member["아이디"] = "닉네임"

2. 로그 기록을 아이디로 저장

  • log.append('아이디', '들어왔습니다.')
  • answer.append("member[아이디]님이 들어왔습니다.")

닉네임이 변경되면 앞의 로그도 모두 변경된 닉네임으로 출력이 되어야 하므로 로그에 기록은 아이디로 저장하고 모든 기록이 끝나면 아이디를 최종 닉네임으로 변경한다.


코드

def solution(record):
    answer,log,member = [],[],{}
    for i in record:
        tmp=i.split()
        if tmp[0]=='Enter':
            log.append([tmp[1],"들어왔습니다."])
            member[tmp[1]] = tmp[2] # ①
        elif tmp[0]=='Leave':
            log.append([tmp[1],"나갔습니다."])
        elif tmp[0]=='Change':
            member[tmp[1]] = tmp[2]
    for i in log: answer.append("{}님이 {}".format(member[i[0]], i[1])) # ②
    return answer

0개의 댓글