알고리즘/알고리즘 공부(python)

프로그래머스_오픈채팅방/Using(Python_파이썬)

소소한필통 2022. 6. 30. 18:55

Problem

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

 

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

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

programmers.co.kr

About Problem

문제

1. 사람들이 들어왔는지 나갔는지 닉네임을 변경했는지 구분하기

2. 들어왔을때, "[닉네임]님이 들어왔습니다."  나갔을때, "[닉네임]님이 나갔습니다."  순서대로 리스트에 넣기

3. 닉네임 변경 

- 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다.

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

입출력

입력이 enter과 change는 총 세개의 단어를 받지만 leave는 두개의 단어를 받는다. 이걸 구분하는 것이 중요하다.

그 뒤로는 result에 어떻게 이전 nickname을 바꿀지가 중요하다.

 

Code

def solution(record):
    # nickname dictionary
    nickname = {}
    # state와 user을 넣을 list
    lst = []
    # 정답을 넣을 list
    answer = []

    # 반복문
    for i in range(len(record)):
        # split으로 분리한 단어들의 숫자로 enter, change와 leave를 구분
        if len(record[i].split()) == 2:
            state, user = record[i].split()
        else:
            state, user, name = record[i].split()
        
        # 각 상태별로 list에 값을 넣을 건지 아니면 dictionary value값만 바꿀건지 확인.
        if state == "Enter":
            nickname[user] = name
            lst.append([state, user])
        elif state == "Leave":
            lst.append([state, user])
        else:
            nickname[user] = name
    
    # 정답들을 answer list에 넣기
    for j in range(len(lst)):
        if lst[j][0] == "Enter":
            answer.append(f"{nickname[lst[j][1]]}님이 들어왔습니다.")
        else:
            answer.append(f"{nickname[lst[j][1]]}님이 나갔습니다.")
    return answer