[프로그래머스/Python] 오픈 채팅방

Sujin Lee·2022년 7월 13일
0

코딩테스트

목록 보기
86/172
post-thumbnail

문제

프로그래머스 - 오픈 채팅방

해결 과정

  • record를 공백을 기준으로 나눈다.
    • Enter일 때 array에 유저의 상태(들어왔는지, 나갔는지)와 유저의 아이디를 삽입해주고, 유저 아이디를 키로, 유저의 닉네임을 값으로 딕셔너리에 저장
    • Leave일 때 array에 유저의 상태(들어왔는지, 나갔는지)와 유저의 아이디를 삽입
    • Change일 때 유저 아이디를 키로, 유저의 닉네임을 값으로 저장되어있는 딕셔너리에서 유저의 닉네임을 바꿔준다.
  • 유저의 상태(입장, 퇴장)와 유저의 아이디가 저장되어있는 array에서
    • 입장했으면 answer 에 유저의 닉네임 + "님이 들어왔습니다."를 삽입
    • 퇴장했으면 answer 에 유저의 닉네임 + "님이 나갔습니다."를 삽입

시행착오

  • 시간 초과
    • 우선 유저의 닉네임이 아니라 유저의 아이디를 기준으로 answer에 저장하고 난 뒤
      ex) "uid1234님이 들어왔습니다."
    • 유저의 아이디와 닉네임이 저장된 딕셔너리와 비교하여 아이디가 같으면 닉네임으로 유저 아이디를 바꿨다.
      ex) "Prodo님이 들어왔습니다."
def solution(record):
    answer = []
    dict = {}
    for i in record:
        user = i.split()        
        if user[0] == "Enter":
            answer.append(user[1]+"님이 들어왔습니다.")
            dict[user[1]] = user[2]
        elif user[0] == "Leave":
            answer.append(user[1]+"님이 나갔습니다.")
        elif user[0] == "Change":
            dict[user[1]] = user[2]
            
    for i in range(len(answer)):
        for j in dict:
            if answer[i].startswith(j):
                answer[i] = answer[i].replace(j,dict[j])

    return answer

풀이

def solution(record):
    answer = []
    array = []
    dict = {}
    for i in record:
        user = i.split()        
        if user[0] == "Enter":
            array.append([user[0],user[1]])
            dict[user[1]] = user[2]
        elif user[0] == "Leave":
            array.append([user[0],user[1]])
        elif user[0] == "Change":
            dict[user[1]] = user[2]
    # array = [['Enter', 'uid1234'], ['Enter', 'uid4567'], ['Leave', 'uid1234'], ['Enter', 'uid1234']]
    # dict = {'uid1234': 'Prodo', 'uid4567': 'Ryan'}
    for i in array:
        if i[0] == "Enter":
            answer.append(dict[i[1]] + "님이 들어왔습니다.")
        if i[0] == "Leave":
            answer.append(dict[i[1]] + "님이 나갔습니다.")

    return answer
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글