알고리즘/백준[baekjoon]

[baekjoon] 백준 11723번 : 집합 (by python) set

코딩하는이씨 2022. 6. 13. 23:32
728x90
반응형

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

 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

 

정답 code

#집합
import sys
input = sys.stdin.readline

s = set() #중복 허용 x
m = int(input())
for _ in range(m):
    x = input().strip().split()

    if len(x) == 1:
        if x[0] == 'all':
            s = set([i for i in range(1,21)])
        else:
            s = set()
        continue

    menu = x[0]
    num = int(x[1])
    if menu == 'add':
        s.add(num)
    elif menu == 'remove':
        s.discard(num) #discard 사용시 num이 s에 없어도 오류 x
    elif menu == 'check':
        if num in s:
            print(1)
        else:
            print(0)
    elif menu == 'toggle':
        if num in s:
            s.discard(num)
        else:
            s.add(num)

 

solution

이번 문제를 풀기전에 생각해야할점은 이것저것 있겠지만 두가지가 중요했다.

  • add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
  • remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다. 

이 두가지 경우인데 x가 있으면 연산을 무시하고 x가 없는 경우에도 연산을 무시한다.

조건 1에 만족하는 방법은 set을 사용하여 중복을 없애는 방법이고

조건 2에 만족하기위해선 remove 대신 discard를 사용하여 x가 없어도 오류를 내지 않도록 한다.

 

이 두가지 말고는 크게 신경쓸 부분이 없는 문제였다.

728x90
반응형