https://www.acmicpc.net/problem/2607
2607번: 비슷한 단어
첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이
www.acmicpc.net
이해
- 문자열 탐색을 통한 완전탐색 구현 문제
- 해당 단어를 탐색하여 개수를 센 후, 이를 비교해도 시간이 충분하다.(O(1,000,000))
구현
- 각 단어별 구성하고 있는 단어와 그 개수를 저장할 dictionary 생성(편의를 위한 defaultdict 사용)
- 단어별 구성 단어와 개수를 저장
- 단어별 구성 단어 개수에서 기준 단어 구성 단어의 개수를 빼서 개수를 재구성(아래와 같이 표현)
- 해당 단어가 n개 존재 → n
- 기준 단어와 비교 시 단어가 m개 없음 → -m
- 기준 단어와의 차이가 절댓값이 2보다 크지 않고, 그 합이 1보다 작을 때만 개수 Check!
코드
# 2607 비슷한 단어
import sys
from collections import defaultdict
input = sys.stdin.readline
def solution(N:int, words:list) -> int:
cnt = 0
# 단어 개수를 저장할 dict 리스트 생성
word = [defaultdict(int) for _ in range(N)]
# 단어 정보 저장
for i in range(N):
for w in words[i]:
word[i][w] += 1
# 1. 해당 단어에서 기준 단어를 개수만큼 뺌
# 2. 해당 단어의 개수가 2보다 작으면서, 개수를 모두 더 했을 때 절댓값이
# 1보다 작으면 카운트
for i in range(1, N):
inw = 0
absi = 0
for j in word[0].keys():
word[i][j] -= word[0][j]
for j in word[i].values():
inw += j
absi += abs(j)
if absi > 2:
break
else:
if abs(inw) <= 1:
cnt += 1
return cnt
if __name__ == "__main__":
N = int(input())
print(solution(N, [input().strip() for _ in range(N)]))
반응형
'Algorithm > SW Expert Academy Review' 카테고리의 다른 글
5249. 최소 신장 트리 (0) | 2024.02.19 |
---|---|
13994. 새로운 버스 노선 (0) | 2023.03.06 |
4613. 러시아 국기 같은 깃발 (0) | 2023.03.06 |
1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2023.03.06 |
1954. 달팽이 숫자 (0) | 2023.03.06 |