프로그래머스 [lv2] 오픈채팅방 파이썬

pyhoo·2021년 4월 14일
0

Algorithm

목록 보기
11/11

접근

  • 아래처럼 set() 형식으로 저장했다. (첫번째 원소인 '순서'는 불필요하다.)
    (순서, 아이디, 이름, 메시지)
    (1, uid1234, Muzi, 님이 들어왔습니다.)
    (2, uid4567, Prodo, 님이 들어왔습니다.)
    (3, uid4567, -, 님이 나갔습니다.)
    (4, uid4567, Prodo, 님이 들어왔습니다.)
    (5, uid4567, Ryan, -)

  • Enter, Leave의 경우만 결과값에 반영된다 -> "Change"는 분기 처리

포인트

  1. 중간에 이름이 바뀌는 경우를 고려하는 것이 가장 중요한 포인트다.
  2. 이름은 바뀔 수 있지만, uid는 고정값이기 때문에 이것을 key로, 변하는 이름을 value로 잡았다.
    (딕셔너리 성질에 의해, 채팅방을 나간 후 이름이 변하는 경우를 곧바로 커버할 수 있다. uid는 동일하기 때문에 변경된 이름만 update 된다.)
  3. 이름이 바뀔 때의 메시지는 출력하지 않는다.

코드

def solution(record):
    answer, tmp = list(), list()
    id_name = {"Enter": "님이 들어왔습니다.",
               "Leave": "님이 나갔습니다."}
    temp = [string.split(' ') for string in record]
    for i in temp:
        if i[0] != 'Leave':
            id_name[i[1]] = i[2]
        if i[0] == "Enter" or i[0] == "Leave":
            tmp.append('{},{}'.format(i[1], i[0]))
    for i in tmp:
        a, b = i.split(',')
        answer.append('{}{}'.format(id_name[a], id_name[b]))

    return answer

0개의 댓글