반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42888
풀이 과정
딕셔너리를 이용하면 쉽게 풀 수 있는 문제
입력이 위와 같이 "Enter" "Leave" "Change"로 주어진다.
"Enter"와 "Leave"를 처리하는 건 쉽지만 까다로운 것은 "Change"이다.
"Change"를 처리하기 위해 나는 딕셔너리를 사용해서 유저의 아이디와 닉네임을 관리했다.
def solution(record):
answer = []
for i in record:
tmp = i.split(" ")
if tmp[0] == "Enter":
answer.append(tmp[2] + "님이 들어왔습니다.")
elif tmp[0] == "Leave":
answer.append(tmp[0] + "님이 나갔습니다.")
return answer
처음에는 이렇게 코드를 작성했었는데, 이렇게 하면 "Change" 처리가 전혀 안 되기 때문에
유저의 아이디, 닉네임을 관리하기 위한 다른 방법이 필요했다.
정답
def solution(record):
answer = []
dic = {} # 회원 정보 관리
result = []
for i in record:
tmp = i.split(" ")
if tmp[0] == "Enter":
dic[tmp[1]] = tmp[2]
answer.append([tmp[1], "in"])
elif tmp[0] == "Leave":
answer.append([tmp[1], "out"])
elif tmp[0] == "Change":
dic[tmp[1]] = tmp[2]
for i in answer:
if i[1] == "in":
result.append(dic[i[0]] + "님이 들어왔습니다.")
elif i[1] == "out":
result.append(dic[i[0]] + "님이 나갔습니다.")
return result
매 입력마다 dic[tmp[1]] = tmp[2] 로 dic에 유저 정보가 등록되고, 변경 되도록 했다.
"Leave" 입력의 경우는 채팅방을 나가는 경우이기 때문에 유저정보 관리를 해 줄 필요는 없다.
answer 배열에는 유저 아이디와 in 또는 out이 저장되도록 해서 들어온 건지, 나간 건지 알 수 있도록 했다.
마지막 for 문에서 dic에 저장된 유저 닉네임과 in, out에 따른 문자열을 result 배열에 저장해서 리턴해주었다.
다른 사람의 풀이
def solution(record):
answer = []
id_nic = {}
for r in record:
s = r.split()
if len(s) > 2:
id_nic[s[1]] = s[2]
for r in record:
s = r.split()
if s[0] == "Enter":
answer.append(id_nic[s[1]] + "님이 들어왔습니다.")
elif s[0] == "Leave":
answer.append(id_nic[s[1]] + "님이 나갔습니다.")
return answer
다른 사람들도 모두 딕셔너리를 사용해서 유저 정보를 관리하는 방식이었다.
위의 코드에서는 "Enter", "Change"에 따른 유저 정보를 딕셔너리에 다 저장해놓고
마지막에 출력해주는 방식이다.
딕셔너리를 어떻게 활용하면 되는지 잘 몰랐다면 까다로울 수 있었을 것 같은 문제였다.
반응형
'Python 코딩테스트' 카테고리의 다른 글
그리디: 백준 1783 병든 나이트 파이썬 (0) | 2022.09.07 |
---|---|
[프로그래머스] 124 나라의 숫자 (0) | 2022.09.05 |
[프로그래머스] 문자열 압축 (0) | 2022.09.01 |
백준 17452 약수의합 파이썬(python) (0) | 2022.01.17 |
수학: 백준 17427 약수의 합 2 파이썬(python) (0) | 2022.01.13 |