https://www.acmicpc.net/problem/11723
s = set()
for _ in range(int(input())):
cmd = input().split()
if cmd[0] == "add":
s.add(int(cmd[1]))
elif cmd[0] == "remove":
s.remove(int(cmd[1]))
elif cmd[0] == "check":
if int(cmd[1]) in s:
print(1)
else:
print(0)
elif cmd[0] == "toggle":
if int(cmd[1]) in s:
s.remove(int(cmd[1]))
else:
s.add(int(cmd[1]))
elif cmd[0] == "all":
s = set(list(range(1, 21)))
else:
s = set()
KeyError
와 시간 초과가 발생한다.KeyError
: set.remove(element)
에서, set
에 element
가 존재하지 않으면 KeyError
가 발생한다.element
가 없어도 오류를 발생시키지 않는 .discard()
를 사용해야 한다.input()
대신 sys.stdin.readline()
을 사용해야 한다.import sys
input = sys.stdin.readline
s = set()
for _ in range(int(input())):
cmd = input().split()
if cmd[0] == "add":
s.add(int(cmd[1]))
elif cmd[0] == "remove":
s.discard(int(cmd[1]))
elif cmd[0] == "check":
if int(cmd[1]) in s:
print(1)
else:
print(0)
elif cmd[0] == "toggle":
if int(cmd[1]) in s:
s.discard(int(cmd[1]))
else:
s.add(int(cmd[1]))
elif cmd[0] == "all":
s = set(range(1, 21))
else:
s = set()
input()
-> sys.stdin.readline()
s = set(list(range(1, 21))
-> set(range(1, 21))
.remove()
-> .discard()
if-else
문으로 구분해서 풀기도 하셨다.set
로 구현할 수 있다.# 1. 집합 생성
s = set() # 빈 집합 생성
s = {1, 2, 3} # 초기 요소를 가진 집합 생성
print("초기 집합:", s) # 출력: 초기 집합: {1, 2, 3}
# 2. 요소 추가
s.add(4) # 요소 4 추가
print("요소 추가 후:", s) # 출력: 요소 추가 후: {1, 2, 3, 4}
# 3. 중복 요소 추가 시도
s.add(2) # 이미 존재하는 요소 2 추가 시도
print("중복 요소 추가 후:", s) # 출력: 중복 요소 추가 후: {1, 2, 3, 4}
# 4. 요소 제거
s.remove(3) # 요소 3 제거
print("요소 제거 후:", s) # 출력: 요소 제거 후: {1, 2, 4}
# 5. 존재하지 않는 요소 제거 시도
# s.remove(5) # 요소 5가 없으면 KeyError 발생
s.discard(5) # 요소 5가 없어도 에러 발생하지 않음
print("요소 제거 시도 후:", s) # 출력: 요소 제거 시도 후: {1, 2, 4}
# 6. 요소 존재 확인
if 2 in s:
print("2는 집합에 있습니다.") # 출력: 2는 집합에 있습니다.
else:
print("2는 집합에 없습니다.")
# 7. 집합 연산
# 다른 집합과의 합집합
s1 = {1, 2, 3}
s2 = {3, 4, 5}
union_set = s1.union(s2)
print("합집합:", union_set) # 출력: 합집합: {1, 2, 3, 4, 5}
# 다른 집합과의 교집합
intersection_set = s1.intersection(s2)
print("교집합:", intersection_set) # 출력: 교집합: {3}
# 다른 집합과의 차집합
difference_set = s1.difference(s2)
print("차집합 (s1 - s2):", difference_set) # 출력: 차집합 (s1 - s2): {1, 2}
# 대칭 차집합 (합집합에서 교집합을 뺀 집합)
symmetric_difference_set = s1.symmetric_difference(s2)
print("대칭 차집합:", symmetric_difference_set) # 출력: 대칭 차집합: {1, 2, 4, 5}
# 8. 집합 반복문
print("집합의 요소들:")
for element in s:
print(element)
# 출력:
# 집합의 요소들:
# 1
# 2
# 4
# 9. 집합 길이 확인
print("집합의 크기:", len(s)) # 출력: 집합의 크기: 3
# 10. 집합 초기화 예제
all_set = set(range(1, 21)) # 1부터 20까지의 숫자를 가진 집합
print("1부터 20까지의 집합:", all_set)
# 출력: 1부터 20까지의 집합: {1, 2, 3, ..., 20}
# 11. 집합 클리어 (모든 요소 제거)
s.clear()
print("집합 클리어 후:", s) # 출력: 집합 클리어 후: set()
set.remove(element)
vs set.discard(element)
.remove()
: set에 element가 존재하지 않으면 KeyError
발생.discard()
: set에 element가 존재하지 않아도 에러 발생 X