알고리즘/프로그래머스
[프로그래머스] 오픈채팅방 - 파이썬
빙빙
2021. 8. 7. 09:58
25번부터 32번까지 시간초과난 코드. 아마 2중 포문을 사용해서 시간초과가 난 것같다.
def solution(record):
#딕셔너리를 사용하여 Enter Change 일때 그에 맞는 닉네임으로 해시의 값을 바꾸면 됩니다
answer = []
res = []
for i in record:
temp = i.split()
res.append(temp)
for i in range(len(res)):
for j in range(0, i):
if res[i][1] == res[j][1]:
if res[i][0] == 'Change' or res[i][0] == 'Enter':
res[j][2] = res[i][2]
else: #Leave
res[i].append(res[j][2])
for i in range(len(res)):
if res[i][0] == 'Enter':
answer.append(res[i][2]+"님이 들어왔습니다.")
elif res[i][0] == 'Leave':
answer.append(res[i][2]+"님이 나갔습니다.")
return answer
그래서 딕셔너리를 이용하여 풀었다!
Enter와 Change일 때 닉네임 값이 들어오므로 Leave일 때는 신경쓰지 않는다.
Enter와 Change이라면 해당 아이디를 딕셔너리의 key로 갖고 value를 닉네임으로 지정해준다. -> 이미 해당 값이 있더라도 뒤에들어오는 닉네임값으로 변경해준다.
또 다시 for문을 돌면서 enter와 leave일 때 answer에 -님이 들어왔습니다, 나갔습니다 라는 문자열로 append 시켜준다.
def solution(record):
answer = []
res = {}
for i in record:
temp = i.split()
if temp[0] == 'Enter' or temp[0] =='Change':
res[temp[1]] = temp[2] #아이디를 키로 가지고있는 딕셔너리를 닉네임으로 바꾼다.
for i in record:
temp = i.split()
if temp[0] == 'Enter':
answer.append(res[temp[1]]+"님이 들어왔습니다.")
elif temp[0] =='Leave':
answer.append(res[temp[1]]+"님이 나갔습니다.")
return answer