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๋ฅผ ๋ฐํํ๋์ง ๋ชฐ๋๋ ํ์ ๊ฑฐ์ ๋ค ํ์๋๋ฐ๋ ์ ๋ผ์ ํฌ๊ธฐํ ๋ป ํ๋ค. ใ ใ ๊ทธ๋๋ ํ์ด์ ๋คํ์ด์๋ค. ๋ด ์ฝ๋๋ ์๊ฐ์ด ์ข ๊ฑธ๋ ค์ ๋ค๋ฅธ ํ์ด๋ฅผ ๋ดค๋๋ฐ ํจ์ฌ ํจ์จ์ด ์ข์๋ค. ๋ ์ ์ ๋ ๊ฒ ์๊ฐ์ ๋ชปํ์๊น ํ์ฌ์ค๋ฝ๊ธฐ๋ ํ๋ค.
์ซ์์ ๋ฌธ์๋ฅผ ๊ตฌ๋ถํ ํ์๊ฐ ์์ ๋ ์ ๊ธฐ์ตํด๋์.
'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ] 1021. ํ์ ํ๋ ํ (Python/์๋ฃ๊ตฌ์กฐ/Silver 3) (1) | 2024.10.29 |
|---|---|
| [BOJ] 2161. ์นด๋1 (Python/์๋ฃ๊ตฌ์กฐ/Silver 5) (0) | 2024.10.29 |
| BOJ 9655๋ฒ : ๋ ๊ฒ์ (Python/๊ตฌํ, DP/Silver 5) (0) | 2024.03.10 |
| BOJ 2164๋ฒ : ์นด๋2 (Python/์๋ฃ๊ตฌ์กฐ(ํ)/Silver 4) (1) | 2024.01.30 |
| BOJ 11728๋ฒ : ๋ฐฐ์ด ํฉ์น๊ธฐ (Python/Two-Pointer/Silver 5) (4) | 2023.11.09 |