이숭간 공부기록
[프로그래머스] 2019 KAKAO _ 오픈채팅방 ⭕️ 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
문제유형 : 문자열, 구현
문제풀이
- ID와 닉네임을 키:값으로 갖는 딕셔너리를 이용 ( defaultdict 이용)
- Enter와 Change일때만 딕셔너리에 해당 아이디에 딸린 닉네임을 바꿔주도록 하고 전체를 반복해서 아이디:닉네임을 저장하는 딕셔너리가 최종 구현이 되면
- 다시 전체 포문을 돌면서 명령에 맞는 문자열로 바꿔서 출력해주면 끝
정답코드
from collections import defaultdict
def solution(record):
answer = []
dic = defaultdict(str)
# 1. 전체입력을 돌면서 아이디(키):닉네임(값)으로 딕셔너리 생성
# 1.1. 이때 딕셔너리에 키값이 있는데, Enter나 Change일경우 닉네임(값)을 변경한다.
# 1.2. Leave면 그냥 넘어간다.
for i in record:
input_list = i.split()
order, key = input_list[0], input_list[1]
if order == "Leave":
continue
val = input_list[2]
dic[key] = val
#2. 다시한번 입력을 돌면서 딕셔너리에서 해당값을 찾아서 명령에맞게 출력한다.
for i in record:
input_list = i.split()
order, key = input_list[0], input_list[1]
if order == "Enter":
answer.append("{}님이 들어왔습니다.".format(dic[key]))
elif order == "Leave":
answer.append("{}님이 나갔습니다.".format(dic[key]))
return answer
더 좋은 풀이 (다른분 풀이)
- Enter와 Leave를 문자열로 바꾸는 과정에서 printer라는 딕셔너리를 사용해서 if문을 사용하지 않아도 됨
- 두번째 포문에서 나는 if enter일때, leave일때를 로직을 구현하고 change일때 continue로 건너뛰도록 했는데 그렇게 하지않고 change가 아닐때만~~ 으로 구현해서 더 간단히 표현함
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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 파이썬 _ 여행경로 (0) | 2021.06.03 |
---|---|
[프로그래머스] 파이썬 _ 단어변환 ⭕️ (0) | 2021.05.29 |
[프로그래머스] 파이썬 _ 네트워크 ⭕️ (0) | 2021.05.29 |
[프로그래머스] 파이썬 _ 비밀지도 (2018 KAKAO) ⭕️ (0) | 2021.05.28 |
[프로그래머스] 타겟넘버 ⭕️ (0) | 2021.05.26 |