코딩테스트

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

pythaac 2021. 8. 29. 00:56
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

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

 

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

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

programmers.co.kr

 

내가 작성한 코드

from collections import defaultdict
def solution(record):
    answer = []
    name = defaultdict(str)
    for line in record:
        cmds = line.split()
        action = cmds[0]
        if action != "Leave":
            id = cmds[1]
            nick = cmds[2]
            name[id] = nick

    for line in record:
        cmds = line.split()
        action = cmds[0]
        id = cmds[1]

        if action == "Enter":
            answer.append(f"{name[id]}님이 들어왔습니다.")
        elif action == "Leave":
            answer.append(f"{name[id]}님이 나갔습니다.")

    return answer
  • 첫 번째 for-loop
    • id의 최종 nickname 탐색
  • 두 번째 for-loop
    • 최종 id를 이용하여 Enter와 Leave에 대한 출력 작성

 

다른 사람이 작성한 코드

None

 

기억해야할 것

  • 꼭 for-loop이 2번 돌았어야하나 싶었다
    • 전체 탐색이 끝나고 다시 전체 탐색을 하는게 뭔가 손해인 느낌
    • 그러나 "Change"가 나올 때마다 모든 id를 탐색해서 수정하는 것보다 명료한 듯
  • 실제 카카오톡에서는 어떻게 할까? (예상)
    • 우선 오픈카톡방은 익명성을 위해 이같은 방식이 적용되지 않는 듯 하다
    • 개인톡에서 이름 바꾸면 채팅 내용에 바로 적용된다 (단톡방도 마찬가지)
    • 채팅 내용이 캐싱되어 있을텐데, 뿌려줄 때 닉네임 블록만 따로 처리할 수도 있을 것 같다