오늘은 신입사원 김크루의 말을 들어주자...!
김크루는 무엇을 해결해야 할까?😆
문제 설명
문제가 너무 길어 요약을 하자면 문자열 배열에 맞게 방을 개설한 사람이 보게 되는 메시지를 문자열 배열 형태로 나타내라는 것이다. 여기서 말하는 문자열 배열을 어떻게 되어있냐면 아래 표를 record의 배열을 보면 알 수 있다.
record | result |
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"] | ["Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."] |
예를 들어 얘기하자면
uid1234 : Muzi Prodo 들어옴.->Muzi->Prodo
uid4567: Prodo Ryan 들어옴.->Prodo -> Ryan
uid1234 : Muzi 나감.
uid1234 : Prodo 들어옴 ->여기서 고유 아이디의 닉네임이 바뀌면 앞도 이름을 바꿔야 함.
uid4567 : Ryan 변경-> 변경으로 인해 앞에 선언된 uid4567의 이름은 모두 Ryan으로 변경되어야 함.
위와 같은 루틴을 거쳐 result가 ["Prodo 님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."]로 정의된다.
이 문제는 제한 사항이 굉장히 많은데 거의 다 당연한 얘기이고 가장 중요한 제한사항은 모든 유저는 유저 아이디로 구분한다는 것이다.
결론적으로 얘기하자면 닉네임은 중복이 될 수 있다는 얘기이다.
그걸 기반으로 문제를 풀었다.
풀이 방법
내가 생각한 풀이 방법은 딕셔너리와 배열의 매핑이었다.
딕셔너리에는 {'user_id':'nickname'} 배열에는 [['상황', 'user_id']] 이런 식으로 저장해 두고 매핑을 해주는 것이었다.
왜?
이유는 유저 아이디라는 중복되는 않는 고유값과 닉네임을 매핑해서 쓰면 굉장히 편할 것이라고 생각이 들었다. 또한 상황 매핑하는 데는 튜플 또는 배열을 쓸 수 있을 것 같았는데 편히 쓸 수 있는 배열을 골랐다.
코드
def solution(record):
answer = []
d={}
enter=[]
for i in record:#돌려 돌려 돌림판
str=i.split()#문자열을 나누고
if str[0]=='Enter':#각 케이스 별로 나누기#
d[str[1]]=str[2]#엔터는 딕셔너리에 각각의 아이디와 이름 저장.
line=[]#이부분은 들어왔는지 나갔는지 아이디와 이름 매핑하는 부분.
line.append("in")
line.append(str[1])
enter.append(line)
elif str[0]=='Leave':#리브는 나갔는지 아이디와 이름 매핑하는 부분.
line=[]
line.append("out")
line.append(str[1])
enter.append(line)
elif str[0]=='Change':#체인지는 말그대로 아이디를 키로 이름을 바꾸는 곳.
d[str[1]]=str[2]
for k in enter:#딕셔너리와 배열 매핑해서 넣어놓기. ex) 딕셔너리에서{"uid2934":"Muiz",....} [[in],[uid2934]]-> Muiz가 들어왔습니다.
sentence=""
if k[0]=='in':
sentence=sentence+d.get(k[1])+"님이 들어왔습니다."
else:
sentence=sentence+d.get(k[1])+"님이 나갔습니다."
answer.append(sentence)
return answer
실행 결과
갑자기 놀고 싶어 졌다 다음 주는 한강 가서 보드 타야지 헤헤😏
'코딩테스트 대비' 카테고리의 다른 글
[알고리즘] 탐색(순차 탐색,이진 탐색) (0) | 2021.05.16 |
---|---|
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2021.04.10 |
[프로그래머스] 메뉴 리뉴얼 (0) | 2021.04.01 |
[프로그래머스] 방문 길이 (1) | 2021.03.25 |
[프로그래머스] 멀쩡한 사각형 (0) | 2021.03.16 |