백준/String
[문자열/백준] 22233번 : 가희와 키워드
ydin
2023. 6. 14. 14:07
- 문제 : https://www.acmicpc.net/problem/22233
문제 이해
- 처음 n개의 문자열을 메모장에 저장한 뒤 다음 m개의 문장이 주어지는데, 이때 메모장에 해당하는 단어들을 제거한 뒤 그때그때마다 메모장에 남은 단어 개수를 출력하는 문제다.
- 메모장에 저장하는 단어들은 딕셔너리에 추가한 뒤 m개의 문장을 탐색하면서 아직 제거되지 않은 단어의 개수를 -1 하고, 케이스마다 메모장의 개수를 출력하면 되는 문제다.
- 어렵지 않아서 코드를 작성했는데 계속 4%에서 틀렸다. 그래서 무엇이 문제인고 하니 입력 받는 단어들 중에 공백이 같이 주어지는게 있는데 그거를 제거하지 않아서 문제가 발생한 것 같다.
문자열에서 공백 제거하는 방법은 .rstrip()을 이용하기!
word = input().rstrip()
temp = list(input().rstrip().split(','))
풀이 로직
- n개의 단어를 words라는 딕셔너리에 추가한다. 메모장의 전체 개수는 total에 저장한다.
- 다음 m개의 문장들을 하나씩 입력받은 뒤 문장에서 ' , '로 단어들을 분리해 탐색한다.
- 각 단어가 words에 있고, 개수가 1개라면, 전체 개수를 하나 빼고, 메모장에서도 단어를 제거한다.(words[each] = 0)
- 각 문장마다 메모장에 있는 단어 개수(total)를 출력하면 된다.
정답 풀이
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
words = {}
total = n
for _ in range(n):
word = input().rstrip()
words[word] = 1
for _ in range(m):
temp = list(input().rstrip().split(','))
for each in temp:
if each in words.keys():
if words[each] > 0:
total -= 1
words[each] = 0
print(total)