🗂️ 문제
링크: https://www.acmicpc.net/problem/11723
💡 접근법
입력값이 ‘add 1’과 같이 2개로 분리하여 사용하는 경우와 ‘all’과 같이 1개로 사용해야하는 경우가 있다. 이는 “ “로 split한 뒤 리스트의 길이를 확인함으로써 두 가지의 경우를 다르게 처리한다.
😎 내 코드
import sys
M = int(sys.stdin.readline())
S = set()
for _ in range(M):
a = sys.stdin.readline().split()
if len(a) == 2:
a, x = a[0], int(a[1])
else:
a = a[0]
if a == "add":
S.add(x)
elif a == "remove":
S.discard(x)
elif a == "check":
print(1) if x in S else print(0)
elif a == "toggle":
S.discard(x) if x in S else S.add(x)
elif a == "all":
S = set([i for i in range(1, 21)])
elif a == "empty":
S = set()
🧐 배운 점
- set에서 데이터를 삭제할 때 remove 대신 discard를 사용하자.
- remove는 삭제할 데이터가 없을 경우 런타임 에러를 발생시키는 반면, discard의 경우 삭제할 데이터가 없어도 오류가 발생하지 않는다.
- Python의 set은 해시 테이블(hash table)을 사용하여 데이터를 저장하고 관리한다. 메모리 효율성과 성능을 위해 충돌을 관리하는 구조를 가지고 있으며, 특히 list와 달리 큰 데이터 집합에서 유리하다.
- 해시 테이블의 주요 연산은 대부분 O(1)의 시간 복잡도를 가진다.
- 삽입(add): 해시 함수를 통해 데이터를 특정 위치에 저장 → O(1)
- 검색(in): 해시 값을 계산해 데이터를 탐색 → O(1)
- 삭제(remove): 해시 값을 계산해 데이터를 찾고 삭제 → O(1)
- 해시 테이블의 주요 연산은 대부분 O(1)의 시간 복잡도를 가진다.
✅ 정답 확인
'Algorithm > Baekjoon' 카테고리의 다른 글
[힙] 백준 #1715 카드 정렬하기 - Python (0) | 2025.01.25 |
---|---|
[BFS] 백준 #1697 숨바꼭질 - Python (0) | 2025.01.21 |
[DFS/BFS] 백준 #1012 유기농 배추 - Python (0) | 2025.01.17 |
[DP] 백준 #1149 RGB 거리 - Python (0) | 2025.01.16 |
[DP] 백준 #1699 제곱수의 합 - Python (0) | 2024.07.25 |