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