티스토리 뷰

PS/BOJ Python

1764번 - 듣보잡

zpqmdh 2023. 3. 23. 23:20

https://www.acmicpc.net/problem/1764

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

문제 입력을 고려하지 않고 리스트로 구현했다가 시간초과가 났다.

파이썬의 자료구조 중 dictionary를 사용하여 구현하였다.

딕셔너리에서 키를 검색하는 방법(key in dict)의 시간 복잡도는 O(1)이지만, 리스트(elem in list)는 O(n)이기 때문에 훨씬 효율적이다. 딕셔너리와 리스트의 주요 연산 시간 복잡도 비교는 아래의 링크에서 더 자세하게 확인할 수 있다. (감사합니다)

https://velog.io/@kimwoody/Python-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%99%80-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC%EC%9D%98-%EC%A3%BC%EC%9A%94-%EC%97%B0%EC%82%B0-%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84

 

[Python] 리스트와 딕셔너리의 주요 연산 시간 복잡도

요즘 코딩 테스트 언어를 파이썬으로 정하고 조금씩 문제를 풀어보는 중이다. 친구에게 * 라는 책을 추천받고 이 책에 나오는 문제들로 공부를 해보는 중에 리스트와 딕셔너리의 주요 연산 시간

velog.io

따라서! 딕셔너리를 사용하면 더 효율적으로 문제를 해결할 수 있다.

# 듣보잡
import sys
input = sys.stdin.readline

N, M = map(int, input().split())
arr = dict()
answer = []
for _ in range(N):
    name = input().rstrip()
    arr[name] = 1 # 듣도 못한 사람
for _ in range(M):
    name = input().rstrip()
    if name in arr: # 듣도 보도 못한 사람
        answer.append(name)
answer.sort() # 정렬
print(len(answer))
print('\n'.join(answer))

'PS > BOJ Python' 카테고리의 다른 글

1182번 - 부분수열의 합  (0) 2023.03.25
2805번 - 나무 자르기  (0) 2023.03.24
10845번 - 큐  (0) 2023.03.23
4949번 - 균형잡힌 세상  (0) 2023.01.19
24444번 - 알고리즘 수업 - 너비 우선 탐색 1  (0) 2023.01.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함