320x100
카카오 공개채용 2019년 문제이다.
문제를 읽으면 알겠지만, id와 닉네임의 동기화가 중요하다.
이때 모두 Enter 시 모두 리스트에 저장해놓고 탐색해도 되겠지만 보나마나 O(n)을 for문안에 넣으면 O(n^2)이 되어버려서 시간초과 날것임이 직감적으로 느껴졌다.
코딩테스트 문제를 풀때나, 프로그래밍 할 때나 마찬가지겠지만, 반복문 안에서 list를 탐색하는 등의 시간의 n시간 이상 걸리는 작업은 웬만하면 하지 않는게 좋다😎
그래서 난 Dict 자료구조를 사용했는데,
리스트처럼 인덱스로만 내부의 아이템을 접근할 수 있는것이 아니라 정말 사전처럼 key값으로 id 값 등의 문자열도 넣어서 사용할 수 있는 자료구조이다.
즉, dict에 { 'key' : 'value' }쌍으로 데이터를 저장해놓으면, list에서 value값을 탐색하는 과정을 생략하고
dict['key']로 O(1)시간 안에 접근할 수 있다는 장점이 있다.
코드는 간단하다.
def solution(record):
answer = []
temp = dict()
for str in record:
li = str.split()
if li[0] == "Enter" or li[0] == "Change":
temp[li[1]] = li[2]
for str in record:
li = str.split()
if len(li) == 2:
answer.append(temp[li[1]]+"님이 나갔습니다.")
continue
if li[0] == "Enter":
answer.append(temp[li[1]]+"님이 들어왔습니다.")
return answer
먼저 dict 에 Enter시 해당 id와 nickname을 key value 쌍으로 해서 넣어주고, change 시 마찬가지로 해당 key인 id에 해당하는 value nickname을 update해주었다.
이후 record를 돌며 출력해주면 된다.
간단한 구현이지만, dict를 생각하지 못했다면 매우 어렵게 다가올 수도 있는 문제같다🙄
728x90
'알고리즘 > Solving' 카테고리의 다른 글
[BOJ 11000 파이썬] 강의실 배정 (0) | 2022.06.22 |
---|---|
[Programmers 파이썬] 기능개발 (0) | 2022.06.22 |
[Programmers 파이썬] 문자열 압축 (0) | 2022.06.22 |
[BOJ 16234 파이썬] 파이썬 인구이동 BFS문제풀이 (0) | 2022.06.21 |
[BOJ 1068 파이썬] 파이썬 트리 BFS 풀이 (0) | 2022.06.21 |