망나니 AWOS의 일상
article thumbnail

문제 풀이 및 요약

문제 이해가 잘 안 되시는 분들에게 직접 그림을 그려서 보여드리겠다.

check x를 통해서만 x가 있는지 없는지를 판단하여 있으면 1을 출력, 없으면 0을 출력한다.

나머지 add, remove, toggle / empty, all 등은 값 삽입, 삭제가 이루어진다.

 

문제에도 나와 있다시피 집합이기 때문에 set()을 써야 한다.

얼핏 보면 set 도 {} 중괄호를 사용하고 있어 {} 중괄호를 사용하는 딕셔너리와 헷갈릴 수도 있으나

 

set 같은 경우 값이 하나 {1, 2, 3}이고

딕셔너리 같은 경우 {'key1' : 'value1', 'key2' : 'value2'}와 같이 key와 value로 이루어져 있다.

 

처음에 set()을 생각을 못하고 list로 접근하여 풀어서... 당연히 틀렸다.. 애초에 시간 초과가 나왔다...

 

시간 초과 문제는 Java에서도 Scanner 대신 BufferedReader를 쓰고

Python에서도 input() 대신에 sys.stdin.readline()을 쓴다...

 

문제에서 시간제한이나 메모리 제한이 넉넉하지 않기 때문에 그 부분도 고려해야 된다...

또한 remove() 대신에 discard()를 써야 한다.

집합 S에 {1, 3}의 값들이 들어있다고 생각했을 때 입력으로 remove 2 가 들어왔다면 집합 S에 해당하는 원소 2가 없기 때문에 KeyError가 발생하여 그대로 끝난다. 

 

하지만 discard 같은 경우 해당 원소가 없어도 에러가 나지 않는다.

출처 : https://wikidocs.net/16044

아직까지 잘 모르겠으나... x를 int형으로 변환해주니까 틀렸습니다가 안 나오고 맞았습니다가 나왔다...

원소들이 다 정수라서 그런지... 정수로 형 변환을 안 해줘서 틀렸습니다가 나온 건가...

 

 

완성된 코드!!😊👍👌

import sys

S = set()
T = int(sys.stdin.readline())
for i in range(T):
    cmdAndX = sys.stdin.readline().split()
    if len(cmdAndX) == 1:
        if cmdAndX[0] == 'all':
            S = set([x for x in range(1, 21)])
        else:
            S = set()

    else:
        cmd, x = cmdAndX[0], int(cmdAndX[1])
        if cmd == 'add':
            S.add(x)
        elif cmd == 'check':
            if x in S:
                print(1)
            else:
                print(0)
        elif cmd == 'remove':
            if x in S:
                S.discard(x)
        elif cmd == 'toggle':
            if x in S:
                S.discard(x)
            else:
                S.add(x)

 

profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!