2021. 8. 13. 22:46ㆍdev
⭐Level 2
https://programmers.co.kr/learn/courses/30/lessons/42888
코드 (Python)
def solution(record):
answer = []
dic = {}
for i in record:
temp = i.split()
if temp[0] == "Enter" or temp[0] == "Change":
dic[temp[1]] = temp[2]
else: # Leave
continue
for i in record:
temp = i.split()
if temp[0] == "Enter":
answer.append(dic[temp[1]] + "님이 들어왔습니다.")
if temp[0] == "Leave":
answer.append(dic[temp[1]] + "님이 나갔습니다.")
else: # Change
continue
return answer
풀이 과정
id는 고유값이며, id에 해당하는 닉네임은 가변적이다. 닉네임이 바뀌는건 Enter와 Change 이 두경우이고, Leave는 떠났다는 메시지만 남긴다.
따라서 딕셔너리 {id: 닉네임} 을 만들고, record 입력중 가장 마지막으로 업데이트 되는 Enter혹은 Change 입력값으로 딕셔너리를 업데이트 해준다.
이때, key가 중복인경우 (동일한 id를 가진경우) 가장 마지막에 들어오는 value값으로 최종 업데이트 된다. (딕셔너리 특성상, key는 중복을 허용하지 않기때문에 마지막 값만 들어간다.)
[입력]
record = ["Enter uid1234 Muzi",
"Enter uid4567 Prodo",
"Leave uid1234",
"Enter uid1234 Prodo",
"Change uid4567 Ryan"]
[출력]
answer = ["Prodo님이 들어왔습니다.",
"Ryan님이 들어왔습니다.",
"Prodo님이 나갔습니다.",
"Prodo님이 들어왔습니다."]
uid1234는 처음에 Muzi로 입장했다가, 채팅방을 나가고 Prodo로 닉네임을 바꿔서 들어왔다.
따라서 최종 닉네임은 Prodo이고, 관리자 화면에서 들어오고 나간 닉네임은 Prodo로 기록되어야한다.
uid4567은 Prodo로 입장해서 닉네임을 Ryan으로 바꿨다. 따라서 최종 닉네임은 Ryan이고, 관리자 화면에 Ryan으로 기록된다.
1. 딕셔너리 만들기
dic = {}
for i in record:
temp = i.split()
if temp[0] == "Enter" or temp[0] == "Change":
dic[temp[1]] = temp[2]
else: # Leave
continue
3: 입력받은 record를 명령어/id/닉네임 으로 분리하여 리스트로 만들어야한다. 따라서 공백을 기준으로 분리하여 temp변수에 저장해두었다.
4~5: 딕셔너리를 구성하는 부분이다. "Enter"와 "Change"를 통해 id마다 닉네임이 정해진다. 모든 record를 돌면서 반복되고, 가장 마지막 value가 최종 닉네임이다. 딕셔너리는 d = {1 : 'a', 2 : 'b'} 에서 d[1]는 'a'를 반환한다. 이런식으로 접근하면 된다.
6~7: "Leave"를 만나도 닉네임이 바뀌는건 아니라서 무시.
예제 입력에 따르면, {'uid1234': 'Prodo', 'uid4567': 'Ryan'} 이라는 딕셔너리가 완성될 것이다. 이제 이 딕셔너리에 접근해서 value만 뽑아내면 된다.
2. 출력
for i in record:
temp = i.split()
if temp[0] == "Enter":
answer.append(dic[temp[1]] + "님이 들어왔습니다.")
if temp[0] == "Leave":
answer.append(dic[temp[1]] + "님이 나갔습니다.")
else: # Change
continue
3~4: 딕셔너리에 접근해서 temp[1] 즉, id에 해당하는 value값을 가져와 메시지와 함께 answer 배열에 저장시킨다.
5~6: "Leave"도 "Enter"와 똑같이 진행
7~8: "Change"는 따로 출력 메시지가 없으므로 무시한다.
'dev' 카테고리의 다른 글
JS기초 | Ajax, JSON 개념정리 및 활용방법 (0) | 2021.08.24 |
---|---|
Python 딕셔너리 자료형 (0) | 2021.08.18 |
[프로그래머스] 나머지 한 점 (Python) (0) | 2021.06.24 |
VS Code 단축키 모음 (0) | 2021.06.05 |
백준 9095: 1,2,3 더하기 (DP) (0) | 2021.05.31 |