문제 내용은 생략하겠습니다.
import sys
input = sys.stdin.readline
n = int(input())
chat_dialogue = []
for _ in range(n):
chat = input()
chat_dialogue.append(chat)
print(chat_dialogue)
ref_list = ["ENTER"]
count = 0
for i in range(1,n):
if "ENTER" in ref_list and chat_dialogue[i] not in ref_list:
count += 1
ref_list.append(chat_dialogue[i])
elif chat_dialogue[i] == "ENTER" and "ENTER" in ref_list:
ref_list.clear()
ref_list.append("ENTER")
print(count)
리스트로 쉽게쉽게 풀었더니 시간초과가 발생했다!
그래서 힌트를 얻으려고 이리저리 뛰어다녔더니,, 리스트로 푸셨나요? 라는 힌트를 얻을 수 있었고, dictionary
형식으로 풀어보려고 했다.
from collections import defaultdict
n = int(input())
chat_dialogue = []
for _ in range(n):
chat = input().rstrip()
chat_dialogue.append(chat)
ref_list = ["ENTER"]
count = 0
seen = defaultdict(int)
for chat in chat_dialogue[1:]:
if chat == "ENTER":
ref_list = ["ENTER"]
seen.clear()
elif chat not in seen and "ENTER" in ref_list:
count += 1
seen[chat] = 1
ref_list.append(chat)
print(count)
이러니까 통과가 되었고, list
와 dictionary
의 차이를 알아보려고 했다.
List와 Dictionary의 차이
리스트:
삽입 (append): O(1)
조회 (indexing): O(1)
삭제 (remove): O(n)
탐색 (in 연산): O(n)
defaultdict:
삽입 (key-value pair 추가): O(1)
조회 (key-value pair 검색): O(1)
삭제 (key-value pair 삭제): O(1)
탐색 (in 연산): O(1)
리스트
와 defaultdict
모두 삽입, 조회, 삭제의 경우에 O(1)의 시간 복잡도를 갖습니다.