아이디어 : Change가 나오는 경우에만 닉네임이 바뀌기 때문에 Change가 나오면 해당 아이디의 닉네임을 최종적인 Change 값으로 바꾸고 Enter와 Leave 부분을 print 한다. => 나갔다가 들어오는 경우에도 닉네임이 바뀌기 때문에 그 부분을 고려하여야 한다! 나가는 건 신경쓰지 말고 들어오는 부분(Enter)을 신경쓰면 된다.
그리고 Leave의 경우 이름이 포함되어 있지 않기 때문에 아이디-이름을 관리하는 리스트(튜플)이 따로 필요하다.
# 첫 번째 시도 (시간 초과 경우 발생)
def solution(record):
id_name_list = []
splited_list = []
for data in record:
splited = data.split()
splited_list.append(splited)
if splited[0]=="Enter" or splited[0]=="Change":
id_name_list.append([splited[1],splited[2]])
for id_name in id_name_list:
for splited in splited_list:
if id_name[0]==splited[1] and splited[0]!="Leave":
splited[2]=id_name[1]
# final print
answer = []
for splited in splited_list:
if splited[0]=="Enter":
answer.append(splited[2]+"님이 들어왔습니다.")
elif splited[0]=="Leave":
for id_name in id_name_list:
if id_name[0]==splited[1]:
name = id_name[1]
answer.append(name+"님이 나갔습니다.")
return answer
# 두 번째 시도
중복되는 항목들을 없애기 위해서 dictionary로 저장하는게 더 나을 것 같다는 생각이 들었다.
def solution(record):
# id_name 수정 dict 만들기
id_name_dict = {}
splited_list = []
for data in record:
splited = data.split()
splited_list.append(splited)
if splited[0]=="Enter" or splited[0]=="Change":
id_name_dict[splited[1]] = splited[2]
# 수정 dict 반영하고 바로 answer에 담기
answer = []
for splited in splited_list:
if splited[0]=="Enter":
name = id_name_dict[splited[1]]
answer.append(name+"님이 들어왔습니다.")
elif splited[0]=="Leave":
name = id_name_dict[splited[1]]
answer.append(name+"님이 나갔습니다.")
return answer
'✨ 공부 기록 > 알고리즘' 카테고리의 다른 글
[프로그래머스 lv 2] 타겟 넘버(깊이/너비 우선 탐색(DFS/BFS)) (0) | 2025.02.26 |
---|---|
[프로그래머스 lv 1] 같은 숫자는 싫어(코딩테스트 고득점 Kit/스택/큐) (0) | 2025.02.25 |
[프로그래머스 lv 0] 컨트롤 제트 (0) | 2025.02.25 |
[프로그래머스 lv 1] 과일 장수 (0) | 2025.02.25 |
[자료구조] chapter 5. Linked Structures : stack(C++ 구현) (0) | 2022.10.14 |