728x90
https://www.acmicpc.net/problem/11723
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
계속 75%에서 틀렸다..
if a[0] =='all':S=set([i for i in range(1,21)])
에서 set([i for i in range(1,21)])라고 하지 않고 {[i for i in range(1,21)]}라고 했기 때문.
set를 쓰지 않고 대괄호를 사용하면 unhashable type error가 발생한다. dictionary type에 list형이 잘못 들어갔다는 경고다.
또 실수 했던 부분은 저 위 코드에서 if a[0] == 'all':이라 하지 않고 if a == 'all':이라고 했다.
print(a)를 해보면, ['all']로 출력되므로 그냥 a라는 리스트를 갖다 넣으면 안되고 argument로 정확히 명시해야 한다.
Sol1
import sys
input = sys.stdin.readline
S = set()
for i in range(int(input())):
a= input().split()
if len(a) == 1:
if a[0] =='all':S=set([i for i in range(1,21)])
else: S=set()
else:
com, X = a[0], int(a[1])
if com == 'add': S.add(X)
elif com == 'remove':S.discard(X)
elif com =='check':print(1 if X in S else 0)
elif com == 'toggle':
if X in S:S.discard(X)
else: S.add(X)
1) 추가로, a= input().strip().split()와 같은 식으로 입력값의 뒷 공백을 제거하고 split()으로 작성한 사람들이 많던데, 구지 그렇게 하지 않아도 된다. split() 써서 다 잘라낸다.
2) remove()함수와 discard()함수의 차이점을 분명히 알 필요가 있다. S.remove(X)함수는 집합 S에 argument X가 없으면 error를 발생시킨다. 그러나 discard()는 발생시키지 않는다. remove를 쓰려면 다음과 같이 코드를 작성할 수 있다.
Sol2
import sys
input = sys.stdin.readline
S = set()
for i in range(int(input())):
a= input().strip().split()
if len(a) == 1:
if a[0] =='all':S=set([i for i in range(1,21)])
else: S=set()
else:
com, X = a[0], int(a[1])
if com == 'add': S.add(X)
elif com == 'remove':
if X in S:
S.remove(X)
elif com =='check':print(1 if X in S else 0)
elif com == 'toggle':
if X not in S:S.add(X)
else:S.remove(X)
'Baekjoon Algorithm > python' 카테고리의 다른 글
[Python]BAEKJOON 10815번 숫자카드 (0) | 2023.03.06 |
---|---|
[Python]BAEKJOON 6491번 Perfection (0) | 2023.03.02 |
[Python]BAEKJOON 1620번 나는야 포켓몬 마스터 이다솜 (0) | 2023.02.25 |
[Python]BAEKJOON 4335번 서로소 (0) | 2023.02.23 |
[Python]BAEKJOON 11689 번 GCD(n, k) = 1 (0) | 2023.02.23 |
댓글