PROGRAMMERS 오픈채팅방

LONGNEW·2022년 7월 26일
0

BOJ

목록 보기
319/333

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

input :

  • record : 문자열이 담긴 배열 (1 <= |record| <= 100,000)
  • 첫 단어는 Enter, Leave, Change 중 하나이다.
  • 각 단어는 공백으로 구분되어 있으며, 알파벳 대문자, 소문자, 숫자로만 이루어져있다.

output :

  • 최종적으로 방을 개설한 사람이 보게 되는 메시지를 문자열 배열 형태로 return

조건 :

  • 입장 : "[닉네임]님이 들어왔습니다."
  • 퇴장 : "[닉네임]님이 나갔습니다."


    닉네임 변경 방식 :
    1. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
    1. 채팅방에서 닉네임을 변경한다.

idea

  1. Id - 닉네임을 딕셔너리로 저장
  2. 출력문에 대한 배열을 생성

생각 바꾸기

구현을 하면서 너무 복잡해져서 간단한 로직으로 변경.

idea

어차피 최종 출력본만 존재하면 된다.
=> 마지막에 존재하는 Id - 닉네임을 매칭해서 출력하기.

구현

id - 출력문 을 매칭하기 위한 배열 2개가 필요함.
id - 닉네임을 저장해놓기위한 딕셔너리 1개 만들기.

입력 받으면서 계속 닉네임을 업데이트 하고 마지막에 concat해서 닉네임 - 출력문을 붙여줌

def solution(record):
    answer = []
    added = []
    
    now_name =  dict()
    for i in range(len(record)):
        temp = record[i].split(" ")
        
        if len(temp) == 2:
            cmd, now_id = temp
            answer.append(now_id)
            added.append("님이 나갔습니다.")
            continue
            
        cmd, now_id, name = temp
        now_name[now_id] = name
        if cmd == "Enter":
            answer.append(now_id)
            added.append("님이 들어왔습니다.")
    
    for i in range(len(answer)):
        answer[i] = now_name[answer[i]] + added[i]
        
    return answer

0개의 댓글