728x90
문제 설명
https://www.acmicpc.net/problem/11723
정답 풀이
import sys
N = int(sys.stdin.readline())
S = set()
for _ in range(N):
temp = sys.stdin.readline().strip().split()
# 연산이 add, empty면 연산만 주어진다.
if len(temp) == 1:
if temp[0] == 'all':
S = set([i for i in range(1, 21)])
elif temp[0] == 'empty':
S = set()
# 연산명에 따라 연산 수행
else:
func = temp[0]
x = int(temp[1])
if func == 'add':
S.add(x)
elif func == 'remove':
S.discard(x)
elif func == 'check':
print(1 if x in S else 0)
elif func == 'toggle':
if x in S:
S.discard(x)
else:
S.add(x)
크게 어렵지는 않은 문제였지만, 풀면서도 뭔가 시간초과가 나올 것 같았던 문제였다.
코드를 효율적으로 작성하기 위해
1. list 자료형으로 풀지 않고, set 자료형을 사용하였다. (시간복잡도)
2. 연산만 주어진 값(all, empty)과, 연산과 숫자가 모두 주어진 값을 분리하였다.
집합에서 원소 삭제 메서드
집합 내에서 원소를 삭제하기 위한 메서드는 remove와 discard 2개가 있다.
둘 다 핵심 기능은 비슷하지만,
remove : 제거하려는 원소가 없으면 에러 발생
discard : 제거하려는 원소가 없어도 에러 X
즉, remove는 실제 존재하는 원소를 지우는 동작에 사용하며,
discard는 집합에 존재하지 않음을 보장하려고 할 때 사용하면 좋다.
실패 기록
import sys
# 연산 수
M = int(input())
# 수행해야 하는 연산
exp = []
for _ in range(M):
exp.append(sys.stdin.readline().split())
# 연산을 진행할 공집합 S
S = []
# 연산 수행 함수
def func_add(exp, x):
if x not in S:
S.append(x)
def func_remove(exp, x):
if x in S:
S.remove(x)
def func_check(exp, x):
if x in S:
print('1')
else:
print('0')
def func_toggle(exp, x):
if x in S:
S.remove(x)
else:
S.append(x)
def func_all(exp):
global S
S = [i for i in range(1, 21)]
def func_empty(exp):
global S
S = []
# 각 연산 수행
for i in exp:
if i[0] == 'add':
func_add(i[0], int(i[1]))
elif i[0] == 'remove':
func_remove(i[0], int(i[1]))
elif i[0] == 'check':
func_check(i[0], int(i[1]))
elif i[0] == 'toggle':
func_toggle(i[0], int(i[1]))
elif i[0] == 'all':
func_all(i[0])
elif i[0] == 'empty':
func_empty(i[0])
위와 같이 풀면, 테스트케이스에서는 정답이 나오지만, 메모리 초과가 나온다.
느낀점
한동안 다른 것에 집중하느라 파이썬 코테를 못 풀었는데,
다시 열심히 시작해야겠다!
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 1 가장 가까운 같은 글자 (0) | 2024.07.30 |
---|---|
[프로그래머스][PYTHON] Lv. 1 가장 가까운 같은 글자 (0) | 2024.07.29 |
[백준][PYTHON] 1157번 단어 공부 (0) | 2024.06.06 |
[백준][PYTHON] 2979번 트럭 주차 (0) | 2024.06.05 |
[백준][PYTHON] 13305번 주유소 (0) | 2024.06.05 |