알고리즘/프로그래머스문제풀이

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

개발자 덕구🐾 2022. 6. 28. 09:34
728x90

 

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

 

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

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

programmers.co.kr

 

 

 

코드 :

 

def solution(record):
    answer = []
    userDB = {}
    actions = []
    
    for event in record :
        info = event.split()
        action,userid = info[0],info[1] 
        if action in ("Enter", "Change") :
            nickname = info[2]
            userDB[userid] = nickname # 최신 닉네임으로 변경 
        actions.append((action,userid))
    
    for actionInfo in actions:
        action,userid = actionInfo[0], actionInfo[1] 
        if action == "Enter" :
            answer.append(f'{userDB[userid]}님이 들어왔습니다.')
        elif action == 'Leave' :
            answer.append(f'{userDB[userid]}님이 나갔습니다.')
            
    return answer

 

 

 

코드를 막상 보면 그렇게 어렵지않은데 

처음 딱 문제를 보면 왜이리 어려울까 

 

 

<딕셔너리 하나로 푼 코드 > :  

def solution(record):
    answer = []
    userDB = {}
    for re in record :
        re = re.split()  
        action,uid = re[0], re[1]
        if action in ("Change" , "Enter") :
            name = re[2]
            userDB[uid] = name
    
    for re in record :
        re = re.split()
        uid= re[1]
        if re[0] == 'Enter' :
            answer.append(f'{userDB[uid]}님이 들어왔습니다.')
        elif re[0] == 'Leave' :
            answer.append(f'{userDB[uid]}님이 나갔습니다.')
            
    return answer

 

변수 명을 신경쓰자

 

 

 

 

 

 

약 4개월이 지난 이후에 풀어보았다. 근데 풀렸다...!! 

지금 만든 코드가 더 간단한듯하다. 

 

def solution(record):
    answer = []
    dic = {}
    for r in record :
        r = r.split()
        if r[0] != 'Leave' :
            dic[r[1]] = r[2]
    for r in record :
        r = r.split()
        if r[0] == 'Enter' :
            answer.append(f'{dic[r[1]]}님이 들어왔습니다.')
        elif r[0] == 'Leave' :
            answer.append(f'{dic[r[1]]}님이 나갔습니다.')
    
    return answer

 

Leave가 아니라면 이름을 갱신해주고 

다시 한번 record를 돌면서 enter일 때 들어왔다고 answer에 붙여주고

leave일 때 나갔다고 answer에 붙여준다. 

 

 

 

 

 

 

 

참고 블로그 : 

https://latte-is-horse.tistory.com/131

 

[프로그래머스 lv2] 오픈채팅방 (파이썬)

2019 KAKAO BLIND RECRUITMENT 문제입니다. 문제 설명 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다.

latte-is-horse.tistory.com

 

복습 : 

✅ 20220629

✅ 20220630

🐾 20221020

 

반응형