프로그래머스 코딩테스트 고득점 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를 탐색해서 수정하는 것보다 명료한 듯
- 실제 카카오톡에서는 어떻게 할까? (예상)
- 우선 오픈카톡방은 익명성을 위해 이같은 방식이 적용되지 않는 듯 하다
- 개인톡에서 이름 바꾸면 채팅 내용에 바로 적용된다 (단톡방도 마찬가지)
- 채팅 내용이 캐싱되어 있을텐데, 뿌려줄 때 닉네임 블록만 따로 처리할 수도 있을 것 같다
'코딩테스트' 카테고리의 다른 글
[프로그래머스][KAKAO_BLIND][2019] 실패율 (0) | 2021.08.30 |
---|---|
[프로그래머스][KAKAO_BLIND][2020] 자물쇠와 열쇠 (0) | 2021.08.29 |
[프로그래머스][KAKAO_BLIND][2021] 카드 짝 맞추기 (0) | 2021.08.26 |
[프로그래머스][KAKAO_BLIND][2021] 합승 택시 요금 (0) | 2021.08.25 |
[백준][오픈테스트] 3초 정렬 (0) | 2021.08.24 |