💯 코딩테스트/[2021~] 💯 코딩테스트

[2019 KAKAO BLIND RECRUITMENT] 오픈채팅방(42888)

락꿈사 2021. 6. 4. 17:35
def solution(record):
    answer = []
    users = {}
    enter_list = []

    for r in record :
        if r.split(' ')[0] == "Enter" :
            users[r.split(' ')[1]] = r.split(' ')[2]
            enter_list.append([r.split(' ')[1], r.split(' ')[0]])
        elif r.split(' ')[0] == "Leave" :
            enter_list.append([r.split(' ')[1], r.split(' ')[0]])
        else :
            users[r.split(' ')[1]] = r.split(' ')[2]

    for i in enter_list :
        if i[1] == "Enter" :
            answer.append("{0}님이 들어왔습니다.".format(users[i[0]]))
        else :
            answer.append("{0}님이 나갔습니다.".format(users[i[0]]))

    return answer

def main() :
    record = ["Enter uid1234 Muzi",
              "Enter uid4567 Prodo",
              "Leave uid1234",
              "Enter uid1234 Prodo",
              "Change uid4567 Ryan"]
    print(solution(record))

if __name__ == "__main__" :
    main()

 * 고려해야 하는 것은?

1. 순서 : 입장하거나 퇴장한 순서대로 메시지를 출력해야 하기 때문

2. 유저 아이디 : 닉네임 변경시 사용자를 구분하는 구분자이기 때문

3. 닉네임 : 출력시 사용해야 하기 때문

4. Enter / Leave : 출력시 사용해야 하기 때문

 

* 변수 설명 :

- answer : 최종적으로 출력할 문자열들을 저장하는 배열. [" ~ ", " ~ ",  ...] 형태.

- users : 유저 아이디를 키로 하여 닉네임을 저장하는 딕셔너리. [{유저 아이디 : 닉네임}, {유저 아이디 : 닉네임}, ... ] 형태.

- enter_list : 유저들이 순서대로 Enter/Leave를 한 기록을 저장하는 배열. [[유저 아이디, Enter/Leave], [유저 아이디, Enter/Leave], ...] 형태

 

* 로직 설명

- record를 공백을 기준으로 나누었을 때 첫번째 문자열이 Enter(r.split(' ')[0])이면 user 딕셔너리에 유저 아이디(r.split(' ')[1])를 key로 하여 닉네임(r.split(' ')[2])을 저장, enter_list 배열에 유저 아이디(r.split(' ')[1])와 Enter/Leaver.split(' ')[0]]) 저장

-  record를 공백을 기준으로 나누었을 때 첫번째 문자열이  Leave(r.split(' ')[0])이면 enter_list 배열에 유저 아이디(r.split(' ')[1])와 Enter/Leaver.split(' ')[0]]) 저장

- 그 외에는 Change 이기 때문에 user 딕셔너리에 유저 아이디(r.split(' ')[1])를 key로 하여 닉네임(r.split(' ')[2])을 저장하여 변경

- 그 다음에는 enter_list의 원소를 하나씩 돌면서(i) 원소의 1번째 원소(i[1])가 Enter이면 user딕셔너리를 유저 아이디로 접근users[i[0]]하여 닉네임+님이 들어왔습니다를 answer에 append.

-  Enter가 아닐 경우 user딕셔너리를 유저 아이디로 접근users[i[0]]하여 닉네임+님이 나갔습니다를 answer에 append.

- answer 반환

 

* 한줄평

나이브하게 풀어서 쉽게 풀었당~^^; 

요정~도까지는 할만함a