Algorithm Problems
[백준][Python] 3078번 좋은 단어 - 큐
WakaraNai
2021. 6. 6. 10:56
728x90
반응형
https://www.acmicpc.net/problem/3078
3078번: 좋은 친구
첫째 줄에 N과 K가 주어진다. (3 ≤ N ≤ 300,000, 1 ≤ K ≤ N) 다음 N개 줄에는 상근이네 반 학생의 이름이 성적순으로 주어진다. 이름은 알파벳 대문자로 이루어져 있고, 2글자 ~ 20글자이다.
www.acmicpc.net
Hint
이름 길이 별로 큐를 생성
Python
import sys
n, k = map(int, sys.stdin.readline().split())
#arr = [ sys.stdin.readline().rstrip() for _ in range(n) ] #성적 순
# 규칙 : 반 등수의 차이가 자신과 K가 넘으면 친구가 아니다
# 좋은 친구 : 친구 중에서 이름의 길이가 같은 친구
# 이름 길이 별로 큐를 생성
arr = [[] for _ in range(21)]
cnt = 0
for i in range(n):
name = sys.stdin.readline().rstrip()
while arr[len(name)] and abs(arr[len(name)][0]-i)>k:
del arr[len(name)][0]
cnt += len(arr[len(name)])
arr[len(name)].append(i)
print(cnt)
시간 초과
k의 길이가 커질 수록 오래 걸린다는 단점
import sys
n, k = map(int, sys.stdin.readline().split())
arr = [ sys.stdin.readline().rstrip() for _ in range(n) ] #성적 순
# 규칙 : 반 등수의 차이가 자신과 K가 넘으면 친구가 아니다
# 좋은 친구 : 친구 중에서 이름의 길이가 같은 친구
cnt = 0
for i in range(len(arr)-1):
for j in range(i+1, min(len(arr),i+k+1)):
if len(arr[i]) == len(arr[j]):
cnt+=1
print(cnt)
728x90
반응형