본문 바로가기
Exercises 🤓/Python

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

by 째파 2022. 6. 17.
반응형

 

7월 초 Python을 써야하는 프로젝트도 하게 되었고 다른 회사 코테는 어떤 형식인지 보고 싶어서 프로그래머스 코테 기출문제를 풀어보게 되었다.

 


 

🤔 문제

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

 

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

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

programmers.co.kr

2019 KAKAO BLIND RECRUITMENT 문제라고 한다. 벌써 3년 전... Level은 2 !

 

😄 나의 풀이

from collections import defaultdict

def solution(record):
    answer = []
    user = defaultdict(set)
    record_id = []

    for sentence1 in record :
        act, user_info = sentence1.split(' ',1)
        if ' ' in user_info :
            user_id, user_name = user_info.split(' ')
            user[user_id] = user_name
        else :
            user_id = user_info
        record_id.append(act + ' ' + user_id)

    for sentence2 in record_id :
        action, user_id2 = sentence2.split(' ')
        if action == 'Enter' :
            answer.append(user[user_id2]+"님이 들어왔습니다.")
        elif action == 'Leave' :
            answer.append(user[user_id2]+"님이 나갔습니다.")

    return answer

다른 코딩 문제를 풀어보다가 defaultdict(set) 을 알게 되었다. 처리 속도도 빠르고 사용하기에 좋은 것 같아서 적용해서 문제를 풀어보았다. 하지만 import를 해줘야 한다는 단점...

 

🤩 Best 풀이

def solution(record):
    answer = []
    namespace = {}
    printer = {'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
    for r in record:
        rr = r.split(' ')
        if rr[0] in ['Enter', 'Change']:
            namespace[rr[1]] = rr[2]

    for r in record:
        if r.split(' ')[0] != 'Change':
            answer.append(namespace[r.split(' ')[1]] + printer[r.split(' ')[0]])

    return answer

다른 답변들 중 가장 많은 좋아요를 받은 답변같다. 엄청나게 기막힌 Best 풀이라고 생각되진 않지만 split을 하나의 변수에 할당해서 index로 풀어가는게 내 code보다 더 적절해보인다!

반응형

댓글