Algorithm
백준 11723번: 집합 - Python 풀이
서서리
2025. 1. 17. 23:16
SMALL
오늘의 문제
https://www.acmicpc.net/problem/11723
내 풀이
# 빠른 입력
import sys
def input(): return sys.stdin.readline().rstrip()
# 집합 S 생성
S = set()
M = int(input())
# M만큼 반복
for _ in range(M):
operation = input().split()
command = operation[0]
if len(operation) > 1: # operation 길이가 2 이상일 때 (command가 all일 때를 대비)
value = int(operation[1]) # 값을 int로 변환하여 value에 저장
if command == "add": # add 명령일 때
S.add(value) # 집합에 value 추가
elif command == "remove": # remove 명령일 때
S.discard(value) # 집합에서 value 삭제
elif command == "check": # check 명령일 때
if value in S: print(1) # 집합에 value가 있다면 1을 출력
else: print(0) # 없으면 0을 출력
elif command == "toggle": # toggle 명령일 때
if value in S: S.discard(value) # 집합에 value가 있다면 제거
else: S.add(value) # 없다면 추가
elif command == "all": # all 명령일 때
S = set(range(1, 21)) # 집합에 1부터 20까지의 수를 할당
else: # empty 명령일 때
S.clear() # 집합 비우기
12시 전에 풀어야 돼서 클래스 미해결 문제 중에 제일 쉬운 걸로 했다. 허허.
처음에 시간초과가 나서 python의 빠른 입력 써주었더니 통과.
근데 또 마냥 쉽지는 않았던 게 python에서 집합 관련 명령어들을 써본 적이 없었음. 있었는데 까먹은 건가? 아무래도 🚬 🚬
그래서 명령어 찾아가며 풀었다. 정리 한 번 하고 끝내겠습니다.
값 제거할 때 remove 말고 discard 명령어를 사용했는데, 그 이유도 아래 내용에서 확인하실 수 있습니다.
집합에 값을 추가하는 명령어 (list처럼 append가 아님)
- add(value) : 집합에 값 하나를 추가한다. 해당 값이 집합에 이미 있다면 무시된다.
- update(iterable) : 집합에 값 여러 개를 추가한다. 이미 있는 값이면 무시된다. 인자(iterable)로 리스트, 튜플, 문자열이 가능하다.
집합에서 값을 삭제하는 명령어
- remove(value) : 특정 값을 삭제한다. 해당 값이 집합에 없으면 KeyError를 발생시킨다.
- discard(value) : 특정 값을 삭제한다. 해당 값이 집합에 없어도 오류가 발생하지 않는다. 무시됨!
- pop() : 집합에서 임의의 값(집합은 순서가 없으니까~)을 삭제하고 그 값을 반환한다. 빈 집합일 경우 KeyError를 발생시킨다.
- clear() : 집합의 모든 값을 제거하여 빈 집합으로 만든다.
집합에서 특정 값을 찾을 때
tmp = { 1, 2, 3 }
# 1이 집합에 있으면 True
if 1 in tmp:
print("1이 tmp에 존재함")
# 4가 집합에 없으면 True
if 4 not in tmp:
print("4가 tmp에 존재하지 않음")
- in / not in 키워드를 통해 집합에서 특정 값의 유무를 확인할 수 있다.
다음엔 무조건 어려운 문제로 돌아오겠습니다.
LIST