[Baekjoon] - 11723. ์ง‘ํ•ฉ(S5)

์˜ค๋™ํ›ˆยท2022๋…„ 2์›” 21์ผ
0

Baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
50/58
post-thumbnail

1. Problem ๐Ÿ“ƒ

๐Ÿ“š ์ถœ์ฒ˜ - 11723 - ์ง‘ํ•ฉ

๋ฌธ์ œ ์„ค๋ช…
๋น„์–ด์žˆ๋Š” ๊ณต์ง‘ํ•ฉ S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

  • add x: S์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20) S์— x๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์—ฐ์‚ฐ์„ ๋ฌด์‹œํ•œ๋‹ค.
  • remove x: S์—์„œ x๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20) S์— x๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์—ฐ์‚ฐ์„ ๋ฌด์‹œํ•œ๋‹ค.
  • check x: S์— x๊ฐ€ ์žˆ์œผ๋ฉด 1์„, ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20)
  • toggle x: S์— x๊ฐ€ ์žˆ์œผ๋ฉด x๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์—†์œผ๋ฉด x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (1 โ‰ค x โ‰ค 20)
  • all: S๋ฅผ {1, 2, ..., 20} ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
  • empty: 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

2. Logic ๐Ÿ‘จโ€๐Ÿซ

Logic
๋ฌธ์ œ์— ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋ผ ๋ฐ”๋กœ ์ฝ”๋“œ๋กœ ๋“ค์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

3. Code ๐Ÿ’ป

1. ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ (์‹œ๊ฐ„ ์ดˆ๊ณผ)

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)

2. ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ (ํ†ต๊ณผ)

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)

4. Feedback ๐Ÿ“š

remove vs discard

ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ค‘์— ์ง‘ํ•ฉ(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

profile
์‚ฝ์งˆ์˜ ๊ธฐ๋ก๋“ค๐Ÿฅ

0๊ฐœ์˜ ๋Œ“๊ธ€