Just Fighting

[프로그래머스] 오픈채팅방 본문

Algorithm/코딩테스트 연습

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

yennle 2022. 1. 10. 15:33
728x90

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

 

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

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

programmers.co.kr

 

 

<문제 설명>

오픈채팅방에 닉네임을 정해서 들어올 수 있다.

채팅방에서 닉네임을 변경하는 방법은 ①나갔다가 들어오거나 ②닉네임을 변경하는 방법 2가지이다.

이 과정에서 메세지가 쌓이는데, "00님이 들어왔습니다", "00님이 나갔습니다"라는 메세지들이 쌓인다.

이때 닉네임이 바뀌면 이전에 쌓인 메세지 속 닉네임도 다 바뀌어야한다.

맨 마지막에 메세지를 확인할 때 보게되는 메시지들을 return하면 되는 문제다.

 

Enter [유저아이디] [닉네임] -> 입장

Leave [유저아이디] -> 퇴장

Change [유저아이디] [닉네임] -> 닉네임 변경

입력 데이터인 배열 record의 위와 같은 문자열데이터를 가진다.

 

 

 

<문제 이해>

record 속의 문장이 

Enter로 시작되면 "[유저아이디]님이 들어왔습니다"

Leave로 시작되면 "[유저아이디]님이 나갔습니다"

를 저장할 수 있는 리스트를 하나 만들고,

유저의 닉네임을 저장할 수 있는 딕셔너리를 하나 만들어서

마지막에 최종 닉네임을 이용하여 [유저아이디]를 [닉네임]으로 바꾸면 되겠다고 생각했다.

 

 

 

<문제 풀이>

def solution(record):
    answer = []
    msg = []
    user = {}
    
    for re in record:
        words = re.split()
        if words[0]=="Enter":
            msg.append(words[1]+"님이 들어왔습니다.")
            user[words[1]] = words[2]
        elif words[0]=="Leave":
            msg.append(words[1]+"님이 나갔습니다.")
        else:
            user[words[1]] = words[2]
            
    for ans in msg:
        uid = ans[0:ans.find("님")]
        ans = ans.replace(uid,user[uid])
        answer.append(ans)

    return answer

코드를 짜다보니 msg에 문장을 저장할 때 한 문장으로 저장하니까

맨 마지막에 [유저아이디]를 [닉네임]으로 바꿀 때 코드가 너무 복잡해지고 어려웠다.

 

 

<풀이 개선>

def solution(record):
    answer = []
    msg = []
    user = {}
    
    for re in record:
        words = re.split()
        if words[0]=="Enter":
            msg.append([words[1],"님이 들어왔습니다."])
            user[words[1]] = words[2]
        elif words[0]=="Leave":
            msg.append([words[1],"님이 나갔습니다."])
        else:
            user[words[1]] = words[2]
            
    for ans in msg:
        answer.append(user[ans[0]]+ans[1])

    return answer

다른 사람의 풀이를 보다가 위에서 말한 복잡함을 해결할 수 있는 방법을 찾았다.

바로 list를 사용하는 것이다. "[유저아이디]님이 들어왔습니다" 이렇게 저장하는 방법이 아니라

[[유저아이디], "님이 들어왔습니다"]로 저장하면 닉네임으로 바꾸는 데 훨씬 간결한 코드를 사용할 수 있었다.

 

 

728x90
Comments