๐ ์ถ์ฒ - 11723 - ์งํฉ
๋ฌธ์ ์ค๋ช
๋น์ด์๋ ๊ณต์งํฉ S๊ฐ ์ฃผ์ด์ก์ ๋, ์๋ ์ฐ์ฐ์ ์ํํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์
๋ ฅ
์ฒซ์งธ ์ค์ ์ํํด์ผ ํ๋ ์ฐ์ฐ์ ์ M (1 โค M โค 3,000,000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ์ํํด์ผ ํ๋ ์ฐ์ฐ์ด ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
check ์ฐ์ฐ์ด ์ฃผ์ด์ง๋๋ง๋ค, ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์
์์ ์ ๋ ฅ | ์์ ์ถ๋ ฅ |
---|---|
26 add 1 add 2 check 1 check 2 check 3 remove 2 check 1 check 2 toggle 3 check 1 check 2 check 3 check 4 all check 10 check 20 toggle 10 remove 20 check 10 check 20 empty check 1 toggle 1 check 1 toggle 1 check 1 | 1 1 0 1 0 1 0 1 0 1 1 0 0 0 1 0 |
Logic
๋ฌธ์ ์ ์๋ ๊ทธ๋๋ก ์ฝ๋ ์์ฑํ๋ฉด ๋๋ ๋ฌธ์ ๋ผ ๋ฐ๋ก ์ฝ๋๋ก ๋ค์ด๊ฐ๊ฒ ์ต๋๋ค.
import sys
input = sys.stdin.readline
def cal(tmp):
global result
if len(tmp) == 1:
# all
if tmp[0] == 'all':
result = set([str(i) for i in range(1, 21)])
# empty 11
else:
result = set()
return
else:
command, target = tmp[0], tmp[1]
# add
if command == 'add':
result.add(target)
# check
elif command == 'check':
if target in result:
print(1)
else:
print(0)
# remove
elif command == 'remove':
result.discard(target)
# toggle
elif command == 'toggle':
if target in result:
result.discard(target)
else:
result.add(target)
M = int(input())
result = set()
for i in range(M):
tmp = list(map(str, input().split()))
cal(tmp)
import sys
input = sys.stdin.readline
result = set()
M = int(input())
for _ in range(M):
tmp = input().strip().split()
if len(tmp) == 1:
# all
if tmp[0] == 'all':
result = set([i for i in range(1, 21)])
# empty 11
else:
result = set()
continue
command, target = tmp[0], tmp[1]
target = int(target) # ์๊ณ ์๊ณ ํ๋ฆผ, ์ฑ๊ณต ์ฐจ์ด๊ฐ ์์ ์ด์ ๋ ์๊ทธ๋ฐ์ง ๋ชจ๋ฅด๊ฒ ์
# add
if command == 'add':
result.add(target)
# check
elif command == 'check':
print(1 if target in result else 0)
# remove
elif command == 'remove':
result.discard(target)
# toggle
elif command == 'toggle':
if target in result:
result.discard(target)
else:
result.add(target)
ํ์ด์ฌ ๋ฐ์ดํฐ ํ์
์ค์ ์งํฉ(set) ํ์
์ด ์์ต๋๋ค. ์งํฉ ํ์
์ ๋ฉ์๋ ์ค์ ํน์ ์๋ฆฌ๋จผํธ๋ฅผ ์ญ์ ํ๋ ๋ฉ์๋๊ฐ ๋ ๊ฐ ์๋๋ฐ, ๊ฐ๊ฐ remove()
, discard()
์
๋๋ค.
s = set()
s.add(10)
s.remove(10)
s.remove(10)
>>>
Traceback (most recent call last):
File "test.py", line 5, in <module>
s.remove(10)
KeyError: 10
์ด๋ฏธ ์งํฉ์ ์๋ฌด๋ฐ ์๋ฆฌ๋จผํธ๋ ์๊ธฐ ๋๋ฌธ์ '10'์ด๋ผ๋ ์๋ฆฌ๋จผํธ๋ฅผ ์ง์ฐ๋ ค๊ณ ํ ๋ KeyError๊ฐ ๋ฐ์ํ๋ค.
s = set()
s.add(10)
s.discard(10)
s.discard(10)
>>> Process finished with exit code 0
์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
์์ฝํด๋ณด์๋ฉด remove()
๋ ์ง์ฐ๋ ค๋ ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด KeyError๋ฅผ ๋ฐ์ ์ํค์ง๋ง discard()
๋ ์๋ฆฌ๋จผํธ๊ฐ ์์ด๋ ์ ์ ์ข
๋ฃ๋ฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ ๐ฉ
remove vs discard