๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 11723๋ฒˆ : ์ง‘ํ•ฉ (Python/๊ตฌํ˜„/Silver 5)

devCloud 2024. 3. 12. 18:09
728x90
 

11723๋ฒˆ: ์ง‘ํ•ฉ

์ฒซ์งธ ์ค„์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์—ฐ์‚ฐ์˜ ์ˆ˜ M (1 ≤ M ≤ 3,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์—ฐ์‚ฐ์ด ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


์„ค๋ช…

๋น„์–ด์žˆ๋Š” ๊ณต์ง‘ํ•ฉ 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๋ฅผ ๊ณต์ง‘ํ•ฉ์œผ๋กœ ๋ฐ”๊พผ๋‹ค

ํ’€์ด

1. ๋ฌธ์žํ˜•์œผ๋กœ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. (๊ฐœํ–‰๋ฌธ์ž๋„ ๋™์‹œ์— ์ œ๊ฑฐ)

2. ๊ณต๋ฐฑ์ด ์—†๋Š” ๊ฒƒ๊ณผ ์žˆ๋Š” ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•ด ์กฐ๊ฑด๋ฌธ์„ ๋งŒ๋“ ๋‹ค. isalpha()๋ฅผ ํ†ตํ•ด ๊ณต๋ฐฑ ์œ ๋ฌด๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค.

3. ๊ณต๋ฐฑ์ด ์—†์„ ๋•Œ

  • ๋ช…๋ น์–ด๊ฐ€ 'all'์ผ ๊ฒฝ์šฐ, ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ 1๋ถ€ํ„ฐ 20๊นŒ์ง€ ์ฑ„์šด๋‹ค. 
  • ๋ช…๋ น์–ด๊ฐ€ 'empty'์ผ ๊ฒฝ์šฐ, ๋ฆฌ์ŠคํŠธ๋ฅผ ๋น„์šด๋‹ค.

4. ๊ณต๋ฐฑ์ด ์žˆ์„ ๋•Œ

  • ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์ˆซ์ž๋กœ ๋œ ๋ฌธ์ž๋Š” ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. split()์„ ํ†ตํ•ด ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ช…๋ น์–ด๊ฐ€ 'add'์ด๋ฉด์„œ ์ง‘ํ•ฉ์— ํ•ด๋‹น ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•œ๋‹ค. append()๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ช…๋ น์–ด๊ฐ€ 'remove'์ด๋ฉด์„œ ์ง‘ํ•ฉ์— ํ•ด๋‹น ์ •์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ œ๊ฑฐํ•œ๋‹ค. remove()๋ฅผ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ช…๋ น์–ด๊ฐ€ 'check'์ผ ๋•Œ 
    • ์ง‘ํ•ฉ์— ํ•ด๋‹น ์ •์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด 1์„ ์ถœ๋ ฅ
    • ์ง‘ํ•ฉ์— ํ•ด๋‹น ์ •์ˆ˜๊ฐ€ ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅ
  • ๋ช…๋ น์–ด๊ฐ€ 'toggle'์ผ ๋•Œ
    • ์ง‘ํ•ฉ์— ํ•ด๋‹น ์ •์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ์ œ๊ฑฐ
    • ์ง‘ํ•ฉ์— ํ•ด๋‹น ์ •์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์ถ”๊ฐ€

 

Solution

import sys
input = sys.stdin.readline

m = int(input())
s = [] #๊ณต์ง‘ํ•ฉ
for _ in range(m):
    num = input().strip() #1. ๋ฌธ์žํ˜•์œผ๋กœ ์ž…๋ ฅ ๋ฐ›๊ธฐ
    if num.isalpha() == True: #๋ฌธ์ž๋งŒ ์žˆ์œผ๋ฉด(๊ณต๋ฐฑ์ด ์—†์œผ๋ฉด)
        if num == 'all':
            s = [0]*20 #์ด๋ ‡๊ฒŒ ์•ˆ ํ•ด์ฃผ๋ฉด out of range ๋œธ
            for i in range(20):
                s[i] = i+1
        if num == 'empty':
            s = []

    if num.isalpha() == False: #๊ณต๋ฐฑ์ด ์žˆ์œผ๋ฉด
        comm, x = num.split()  # ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
        x = int(x)
        if comm == 'add' and x not in s:  # ๋ช…๋ น์–ด๊ฐ€ add์ผ ๋•Œ x๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ x๋ฅผ ๊ณต์ง‘ํ•ฉ์— ์ถ”๊ฐ€
            s.append(x)
        if comm == 'remove' and x in s:  # ๋ช…๋ น์–ด๊ฐ€ remove์ผ ๋•Œ x๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ x๋ฅผ ๊ณต์ง‘ํ•ฉ์—์„œ ์ œ๊ฑฐ
            s.remove(x)
        if comm == 'check':
            if x in s:
                print(1)
            else:
                print(0)
        if comm == 'toggle':
            if x in s:
                s.remove(x)
            else:
                s.append(x)

TIL

- set(map(str, num)) : ์ค‘๋ณต๋œ ๊ฒƒ์„ ์ œ๊ฑฐํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- list(map(str, num)) : set๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

- strip() : ๋ฌธ์ž์—ด ์–‘๋ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

- rstrip()/lstrip() : ๋ฌธ์ž์—ด ์˜ค๋ฅธ์ชฝ/์™ผ์ชฝ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

- replace(old, new) : ์›ํ•˜๋Š” ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

์ˆซ์ž, ๋ฌธ์ž ํŒ๋ณ„

- isalpha() : ๋ฌธ์ž์—ด์ด ๋ชจ๋‘ ๋ฌธ์ž์ธ์ง€ ํŒ๋ณ„(๋‹จ, ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ False ๋ฐ˜ํ™˜)

- isdigit() : ๋ฌธ์ž์—ด์ด ๋ชจ๋‘ ์ˆซ์ž์ธ์ง€ ํŒ๋ณ„(๋‹จ, ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ False ๋ฐ˜ํ™˜)

- isdecimal() : ์–ด๋–ค ๋ฌธ์ž์—ด์ด intํ˜•์œผ๋กœ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋ฉด True ๋ฐ˜ํ™˜

- isnumeric() : ์ˆซ์ž๊ฐ’ ํ‘œํ˜„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž์—ด์ด๋ฉด True ๋ฐ˜ํ™˜ (์˜ˆ: 32,½ ...)

- isalnum() : ์ˆซ์ž์™€ ๋ฌธ์ž์—ด์ด ๋ชจ๋‘ ์žˆ๋Š”์ง€ ํŒ๋ณ„(๋‹จ, ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ False ๋ฐ˜ํ™˜)

 

ํšจ์œจ์ ์ธ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

s = []

def calc(command, x):
    global s
    if command == "add":
        if x not in s:
            s.append(x)
    elif command == "remove":
        if x in s:
            s.remove(x)
    elif command == "check":
        if x in s: 
            print(1)
        else: 
            print(0)
    elif command == "toggle":
        if x in s:
            s.remove(x)
        else: 
            s.append(x)
    elif command == "all": 
        s = [i for i in range(1,21)]
    elif command == "empty": 
        s=[]

m = int(input())

for _ in range(m):
    command = input().strip()
    if command == "all" or command == "empty":
        calc(command, 0)
    else : 
        command, x = command.split()
        calc(str(command), int(x))

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

๊ณต๋ฐฑ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์„ ๋งŽ์ด ํ—ˆ๋น„ํ–ˆ๋‹ค. ๋ฌธ์ž์™€ ์ˆซ์ž๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ False๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”์ง€ ๋ชฐ๋ž๋˜ ํƒ“์— ๊ฑฐ์˜ ๋‹ค ํ’€์—ˆ๋Š”๋ฐ๋„ ์•ˆ ๋ผ์„œ ํฌ๊ธฐํ•  ๋ป” ํ–ˆ๋‹ค. ใ…œใ…œ ๊ทธ๋ž˜๋„ ํ’€์–ด์„œ ๋‹คํ–‰์ด์—ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ค์„œ ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๋ดค๋Š”๋ฐ ํ›จ์”ฌ ํšจ์œจ์ด ์ข‹์•˜๋‹ค. ๋‚œ ์™œ ์ €๋ ‡๊ฒŒ ์ƒ๊ฐ์„ ๋ชปํ–ˆ์„๊นŒ ํ•œ์‹ฌ์Šค๋Ÿฝ๊ธฐ๋„ ํ•˜๋‹ค.

์ˆซ์ž์™€ ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์ž˜ ๊ธฐ์–ตํ•ด๋‘์ž.

728x90