본문 바로가기

Python 코딩테스트

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

반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


풀이 과정

딕셔너리를 이용하면 쉽게 풀 수 있는 문제

 

 

입력이 위와 같이 "Enter" "Leave" "Change"로 주어진다.

"Enter"와 "Leave"를 처리하는 건 쉽지만 까다로운 것은 "Change"이다.

 

"Change"를 처리하기 위해 나는 딕셔너리를 사용해서 유저의 아이디와 닉네임을 관리했다.


 

def solution(record):
    answer = []
    
    for i in record:
        tmp = i.split(" ")
        
        if tmp[0] == "Enter":
            answer.append(tmp[2] + "님이 들어왔습니다.")
        elif tmp[0] == "Leave":
            answer.append(tmp[0] + "님이 나갔습니다.")
    
    return answer

처음에는 이렇게 코드를 작성했었는데, 이렇게 하면 "Change" 처리가 전혀 안 되기 때문에 

유저의 아이디, 닉네임을 관리하기 위한 다른 방법이 필요했다.

 

정답 

def solution(record):
    answer = []
    dic = {} # 회원 정보 관리
    result = []
    
    for i in record:
        tmp = i.split(" ")
        if tmp[0] == "Enter":
            dic[tmp[1]] = tmp[2]
            answer.append([tmp[1], "in"])
        elif tmp[0] == "Leave":
            answer.append([tmp[1], "out"])
        elif tmp[0] == "Change":
            dic[tmp[1]] = tmp[2]
            
    for i in answer:
        if i[1] == "in":
            result.append(dic[i[0]] + "님이 들어왔습니다.")
        elif i[1] == "out":
            result.append(dic[i[0]] + "님이 나갔습니다.")
    
    return result

 매 입력마다 dic[tmp[1]] = tmp[2] 로 dic에 유저 정보가 등록되고, 변경 되도록 했다.

 

"Leave" 입력의 경우는 채팅방을 나가는 경우이기 때문에 유저정보 관리를 해 줄 필요는 없다.

 

answer 배열에는 유저 아이디와 in 또는 out이 저장되도록 해서 들어온 건지, 나간 건지 알 수 있도록 했다.

 

마지막 for 문에서 dic에 저장된 유저 닉네임과 in, out에 따른 문자열을 result 배열에 저장해서 리턴해주었다. 

 

다른 사람의 풀이

def solution(record):
    answer = []
    id_nic = {}
    for r in record:
        s = r.split()
        if len(s) > 2:
            id_nic[s[1]] = s[2]

    for r in record:
        s = r.split()
        if s[0] == "Enter":
            answer.append(id_nic[s[1]] + "님이 들어왔습니다.")
        elif s[0] == "Leave":
            answer.append(id_nic[s[1]] + "님이 나갔습니다.")
    return answer

 

다른 사람들도 모두 딕셔너리를 사용해서 유저 정보를 관리하는 방식이었다.

 

위의 코드에서는 "Enter", "Change"에 따른 유저 정보를 딕셔너리에 다 저장해놓고 

마지막에 출력해주는 방식이다. 

 

딕셔너리를 어떻게 활용하면 되는지 잘 몰랐다면 까다로울 수 있었을 것 같은 문제였다.

반응형