https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
문제풀이
단순히 문자열 파싱을 통해 문제를 해결하였다.
- 주의할 점
- 닉네임 변경시, 최종 출력 메시지의 닉네임도 모두 변경된다.
- 닉네임은 중복 가능하지만, uid는 고유값이므로 중복되지 않는다.
코드
def solution(record):
user = {}
result = []
answer = []
for rec in record:
rec = rec.split(' ')
if rec[0] == "Enter":
user[rec[1]] = rec[2]
result.append((rec[1], "Enter"))
if rec[0] == "Leave":
# del(user[rec[1]])
result.append((rec[1], "Leave"))
if rec[0] == "Change":
user[rec[1]] = rec[2]
for res in result:
if res[1] == "Enter":
answer.append(user.get(res[0]) + "님이 들어왔습니다.")
if res[1] == "Leave":
answer.append(user.get(res[0]) + "님이 나갔습니다.")
return answer
먼저 입력받은 record 값들을 .split(' ')을 사용하여 공백을 기준으로 문자열을 나누어 rec에 저장해 줍니다.
조건문을 사용하여 rec[0]의 상태에 따라 처리를 해줍니다.
딕셔너리를 사용하여 유저들의 정보를 저장해줍니다.
ex_ {uid:name}
닉네임을 변경할 경우 uid를 통해 Key값을 찾아 Value값만 수정해주면 됩니다.
최종적으로 결과에 담아야하는 출력로그를 얻기위해선 Key값의 중복을 허용하지 않는 딕셔너리를 사용할 수 없습니다.
따라서 추가적으로 (uid,상태) 형식의 튜플을 리스트에 따로 저장해줍니다.
기록처리가 끝난 후, 조건에 따라 딕셔너리에 저장되어있는 회원의 uid(Key)를 get을 사용하여 최종적으로 저장된 회원들의 name을 가져와 answer에 저장해줍니다.
- 코딩시 주의점
회원의 방을 나갔을 때 del(dict)를 사용하여 회원의 정보를 제거하였는데, 회원 한명만 들어오고 나갔을 경우에는 딕셔너리에 아무런 정보가 없어 런타임 오류가 나게됩니다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 / Python (0) | 2021.11.08 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 / Python (0) | 2021.11.05 |