https://www.acmicpc.net/problem/1337
시간 2초, 메모리 128MB
input :
output :
조건 :
문제에서 가장 헷갈렸던 점은 쓸 수 있는 것이 너무 많아서 였다.... 그리고 접근의 방향이 반대로 되었어야 했다.
입력해야 하는 원소의 개수를 세아리려던것이 시간을 잡아먹은 원흉이라고 본다. 차라리 서브 배열에 들어갈 원소들을 찾고 나중에 5에서 빼주는 것이 훨씬 생각하기 쉬웠다.
그리고 투 포인터와 비슷한 슬라이딩 윈도우라는 알고리즘이 존재하는데 이를 생각해 보아야 했다.
기본적으로 for 문을 돌며 언제나 원소를 넣어주지만, 이 서브배열의 가장 끝값이 제일 앞에 값과 비교를 해서 차가 5이상이라면 이 배열은 만들 수 가 없다, 그래서 while문으로 제일 앞을 날리고 계속 비교를 한다.
이 때에 서브 배열의 cnt는 줄어야 하고 제일 앞을 나타내는 인덱스는 증가해야 한다.
import sys
n = int(sys.stdin.readline())
data = []
for i in range(n):
data.append(int(sys.stdin.readline()))
data.sort()
cnt, ans = 0, 0
start = 0
for end in range(len(data)):
cnt += 1
while data[end] - data[start] > 4:
start += 1
cnt -= 1
ans = max(ans, cnt)
if ans > 5:
ans = 5
print(5 - ans)