[ 문제 ]
[출제 의도]
- 해시 활용
[ 문제 풀이 ]
먼저, record를 순회하면서 '입장과 변경 기록'을 가지고 딕셔너리를 이용해 유저 아이디마다 최종 닉네임을 구하고,
'입장과 퇴장 기록'은 new_record를 만들어서 따로 저장합니다.
그다음, new_record를 순회하면서 채팅방에 출력할 메시지를 생성합니다.
이때 유저 아이디는 최종 닉네임을 사용하면 됩니다.
[ 정답 코드 ]
# 시간복잡도 O(N)으로 처리
from collections import defaultdict
def solution(record):
name = defaultdict(str)
order = []
new_record = []
# 닉네임 관리
for datas in record:
data = datas.split()
if data[0] != "Leave": # 닉네임 (입장, 변경)
user_id, nick_name = data[1], data[2]
name[user_id] = nick_name
if data[0] == "Enter" or data[0] == "Leave": # 메시지 (입장, 퇴장)
new_record.append(data)
# 메시지 출력
for data in new_record:
if data[0] == "Enter": # 입장
order.append("%s님이 들어왔습니다." % name[data[1]])
elif data[0] == "Leave": # 퇴장
order.append("%s님이 나갔습니다." % name[data[1]])
return order
print(solution(["Enter uid1234 Muzi",
"Enter uid4567 Prodo",
"Leave uid1234",
"Enter uid1234 Prodo",
"Change uid4567 Ryan"]))
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2018 KAKAO BLIND RECRUITMENT][Python] 방금그곡 (0) | 2022.05.16 |
---|---|
[프로그래머스][2018 KAKAO BLIND RECRUITMENT][Python] 비밀지도 (0) | 2022.05.03 |
[프로그래머스][2019 KAKAO BLIND RECRUITMENT][Python] 매칭 점수 (0) | 2022.03.28 |
[프로그래머스][2020 KAKAO BLIND RECRUITMENT][Python] 괄호 변환 (0) | 2022.03.23 |
[프로그래머스][2020 KAKAO BLIND RECRUITMENT][Python] 문자열 압축 (0) | 2022.03.21 |