728x90
🌅
https://www.acmicpc.net/problem/11723
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
내 풀이
import sys
M = int(sys.stdin.readline())
S = set()
for _ in range(M):
command = sys.stdin.readline().split()
c1 = command[0]
if len(command) == 2:
c2 = int(command[1])
# add
if c1 == 'add':
S.add(c2)
# remove
elif c1 == 'remove':
S.discard(c2)
# check
elif c1 == 'check':
if c2 in S:
print(1)
else:
print(0)
# toggle
elif c1 == 'toggle':
if c2 in S:
S.discard(c2)
else:
S.add(c2)
else:
# all
if c1 == 'all':
S = {i for i in range(1,21)}
# empty
elif c1 == 'empty':
S = set()
코드 설명
제목 그대로 집합을 사용하는 문제다.
집합에 대해 잘 몰라서 배열로 구현하려고 했던 나 *^^*
S = set()
사용자에게 명령을 입력받아, 실행할 연산을 c1에 저장한다.
command = sys.stdin.readline().split()
c1 = command[0]
command의 길이가 2인 경우, add, remove, check, toggle 중에 하나일 것이다.
add(): 집합에 요소를 추가한다. 해당 값이 이미 존재한다면, 아무런 변화가 없다.
discard(): 집합에서 지정된 요소를 제거한다. 요소가 없어도 에러가 발생하지 않는다.
remove()도 사용할 수 있지만, 요소가 없을 때 에러가 발생한다.
if len(command) == 2:
c2 = int(command[1])
# add
if c1 == 'add':
S.add(c2)
# remove
elif c1 == 'remove':
S.discard(c2)
# check
elif c1 == 'check':
if c2 in S:
print(1)
else:
print(0)
# toggle
elif c1 == 'toggle':
if c2 in S:
S.discard(c2)
else:
S.add(c2)
command의 길이가 1인 경우, all, empty 중에 하나일 것이다.
else:
# all
if c1 == 'all':
S = {i for i in range(1,21)}
# empty
elif c1 == 'empty':
S = set()
🙀 어려웠던 점
시간초과가 발생했다.
✌🏻 해결방법
1. input() ➡ sys.stdin.readline()
2. all 명령 수행 방식 변경
# 수정 전
S = {str(i) for i in range(1,21)}
# 수정 후
S = {i for i in range(1,21)}
'코딩테스트' 카테고리의 다른 글
[백준][Python] 2960 에라토스테네스의 체 (0) | 2024.04.13 |
---|---|
[백준][Python] 11508 2+1 세일 (0) | 2024.04.02 |
[백준][Python] 10431 줄세우기 (0) | 2024.03.31 |
[백준][Python] 22251 빌런 호석 (0) | 2024.03.30 |
[백준][Python] 25757 임스와 함께하는 미니게임 (0) | 2024.03.29 |