프로그래머스(Python) 풀이/Level.2

프로그래머스(Python) 42888번 오픈채팅방 풀이

개발윗미 2022. 5. 4. 10:32

Python으로 구현한 42888번 오픈채팅방 문제 풀이입니다.

 

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

 

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

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

programmers.co.kr


def solution(record) :
    answer = []
    info = {}
    value = []
    for i in range(len(record)) :
        state = list(record[i].split(" "))
        if len(state) >= 3 :
            # Enter 혹은 Change일 경우
            if state[0] == "Enter" :
                info[state[1]] = state[2]
                value.append([state[1], state[0]])
            elif state[0] == "Change" :
                info[state[1]] = state[2]
        else : # Leave일 경우
            value.append([state[1], state[0]])

    for i in range(len(value)) :
        if value[i][1] == "Enter" :
            str_value = "님이 들어왔습니다."
        elif value[i][1] == "Leave" :
            str_value = "님이 나갔습니다."
        answer.append(info[value[i][0]] + str_value)


    return answer

 

1. 각 uid별로 갱신된 닉네임(name)을 담기 위해 info 딕셔너리를 정의한다.

 

2. 전달받은 record 리스트의 요소를 하나씩 꺼내 공백으로 나눠 리스트 형태로 구성하여 state에 할당한다.

 

3. state의 길이가 3 이상일 경우 Enter 혹은 Change 명령이 존재하고 이에 대한 처리 작업은 아래와 같다.

  - state의 0번째 요소가 "Enter"일 경우 해당 uid의 닉네임 값을 state[2]로 할당하고, value 리스트에 [uid, 명령] 형태로 추가한다.

  - state의 0번째 요소가 "Change"일 경우 해당 uid의 닉네임 값을 state[2]로 갱신한다.

 

4. state의 길이가 3 미만일 경우는 Leave 명령에 해당되며, value 리스트에 [uid, 명령] 형태로 추가한다.

 

5. 위 반복작업을 모두 마치면 value 리스트의 요소를 하나씩 확인하고, 아래와 같이 작업을 수행한다.

  - 현재 확인하고 있는 요소의 첫 번째 값이 "Enter"일 경우 str_value에 "님이 들어왔습니다."를 할당한다.

  - 현재 확인하고 있는 요소의 첫 번째 값이 "Leave"일 경우 str_value에 "님이 나갔습니다."를 할당한다.

  - info 딕셔너리에서 uid에 대한 값(닉네임)을 가져와 str_value 문구를 합쳐 answer 리스트에 할당한다.

 

6. answer 리스트 구성을 모두 완료하면 최종적으로 answer 리스트를 반환한다.