오뚝이개발자

[백준11723] 집합 본문

코딩 테스트/백준

[백준11723] 집합

땅어 2020. 3. 10. 18:10
728x90
300x250

문제


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

 

11723번: 집합

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

www.acmicpc.net

 

생각의 흐름


문제가 꽤나 직관적이다. 그냥 시키는 대로 분기를 시켜 짜면 된다.

출제의도는 아마 set을 사용하는 방법을 익히도록 하려던 것 같다.

 

깨달은 점


set에는 list와는 다른 점들이 몇 가지 존재한다. 코드 상에서 사용된 부분들에 대해서만 소개하고자 한다.

  • set에는 중복이 없다. 즉, temp = [1,2,3,3]이라는 list를 temp = set(temp)를 하고나면 [1,2,3]이 된다.
  • 하지만 순서도 없다. 따라서 for i in temp를 이용해 print(i)를 하면 반드시 1,2,3순으로 출력된다는 보장이 없다.
  • set에도 remove가 있지만 discard를 쓴 이유는 해당 remove의 경우 해당 원소가 없으면 ERROR를 내지만 discard는 그냥 진행하기 때문이다.
  • set에 원소 1개를 추가할 땐 add를 사용. 여러 개를 추가할 때는 update 사용. 

코드


import sys

N = int(input())
S = {}
S = set()
for _ in range(N):
    line = sys.stdin.readline().split()
    
    if line[0]=='add':
        S.add(line[1])
        continue
    elif line[0]=='remove':
        S.discard(line[1])
        continue
    elif line[0]=='check':
        if line[1] in S:
            print(1)
            continue
        else:
            print(0)
            continue
    elif line[0]=='toggle':
        if line[1] in S:
            S.remove(line[1])
            continue
        else:
            S.add(line[1])
            continue
    elif line[0]=='all':
        S.update(['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20'])
        continue
    elif line[0]=='empty':
        S = {}
        S = set()
    

 

728x90
300x250

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준15650] N과 M (2)  (0) 2020.03.14
[백준15649] N과 M (1)  (0) 2020.03.12
[백준15658] 연산자 끼워넣기 (2)  (0) 2020.03.10
[백준14501] 퇴사  (0) 2020.03.10
[백준1182] 부분수열의 합  (0) 2020.03.10
Comments