- 문제 : 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)

+ Recent posts