앨리스는 파리에 가는 걸 좋아합니다.
그녀는 도시에 있는 동안, 볼 수 있는 만큼 많은 기념물을 보려고 노력하며 방문하는 날마다 어떤 랜드마크를 보았는지 여행 수첩에 기록합니다.
여러 해 동안 파리를 몇 번이나 방문한 후, 앨리스는 방문한 몇 년간 어느 정도의 각각 다른 기념물을 봤는지 궁금해졌습니다.
그녀는 자신이 기록한 여행 수첩을 당신에게 보여주며 자신이 파리에 방문했을 동안 서로 다른 몇 개의 랜드마크를 보았는지 계산알려달라고 도움을 요청하고 있습니다.
입력은 모두 n개의 줄로 구성되어 있으며, 각 줄은 먼저 날짜 (형식: YYYY-MM-DD), 그 다음에는 공백, 그 후에는 기념물의 이름이 포함되어 있습니다.
기념물의 이름은 임의의 길이를 가진 문자열이며 새 줄 문자(\n
)를 제외한 임의의 출력 가능한 문자를 포함합니다.
당신이 출력해야 할 내용은 하나의 줄로 이루어져 있으며, 해당 내용은 위에 언급한 정수 형태의 m이며 입력에서 구별된 기념물의 수입니다.
처음에는 Dictionary와 set을 사용해서, 해당 랜드마크가 있을 때는 넣고 아닐 때는 자료구조에 추가하는 걸 pass 한 다음
이 자료구조의 길이를 출력하게끔 했다.
.
.
.
그랬더니 시간 초과가 6번(...)이나 나와서 해당 방법은 포기하고,
Counter를 사용하여 위에서 적은 것과 비슷한 로직으로 문제를 해결하였다.
사용자의 값을 받아 list에 추가한 다음, 리스트 값을 인자로 넘겨서 해당 메소드에서 파싱을 진행한다.
파싱을 통해 얻은 랜드마크의 이름이 기존 카운터 안에 있는 경우 1을 추가.
그 후 카운터의 길이를 반환하여 해당 값을 출력하는 형식으로 코드를 짰다.
from collections import Counter
import sys
def count_monuments(input_lines):
monuments_counter = Counter()
for line in input_lines:
if not line:
break
_, monument = line.split(' ', 1)
monuments_counter[monument] += 1
distinct_monuments = len(monuments_counter)
return distinct_monuments
user_input_lines = []
while True:
line = sys.stdin.readline().rstrip()
if not line:
break
user_input_lines.append(line)
result = count_monuments(user_input_lines)
print(result)