From b287d194af5954199534ccc47ed57059fd02257a Mon Sep 17 00:00:00 2001 From: nkey Date: Thu, 29 Jan 2026 23:44:46 +0900 Subject: [PATCH] =?UTF-8?q?22233-s3=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_8708/22233-s3.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 workbook_8708/22233-s3.py diff --git a/workbook_8708/22233-s3.py b/workbook_8708/22233-s3.py new file mode 100644 index 0000000..2293cb0 --- /dev/null +++ b/workbook_8708/22233-s3.py @@ -0,0 +1,38 @@ +# 가희와 키워드 + +import sys + +input = sys.stdin.readline + +def solution(): + n, m = map(int, input().rstrip().split()) + + memo = set() + + for _ in range(n): + memo.add(input().rstrip()) + + for _ in range(m): + for keyword in input().rstrip().split(","): + if keyword in memo: + memo.remove(keyword) + + print(len(memo)) + + return + + +solution() + +""" +걸린 시간: 20분 + +시간 복잡도: 한 글에 최대 키워드가 10개이므로, set으로 차집합을 구하면 두 집합 중 작은 것만큼 시간이 드는데, +작은 것의 최대 길이가 10이므로 O(10m)이다. set의 길이는 key의 개수이므로 O(1)이기 때문이다. + +해설: 처음에는 memo - keyswords를 했는데 이 연산은 비파괴 연산이라 기존 set들을 유지해야하므로 +차집합된 set을 새로 만든다. 따라서 memo 길이만큼의 시간이 든다. +그래서 in으로 있는지 확인(O(1))하고, remove(O(1))로 지웠다. +remove는 key가 없으면 keyerror가 나는데 그래서 나는 있을 때만 지워서 괜찮았고, +discard를 쓰면 있으면 지우고 없으면 그냥 가만히 있는다고 한다. +""" \ No newline at end of file