9개의 댓글이 있습니다.
-
-
Kureyo -
안녕하세요
A배열은 정렬되어있다는 가정하에
어떤 i에 대해, A[j]-A[i]>=M인 가장 작은 j를 안다고 합시다.
이제 i+1에 대해 생각하면, k=j-1,j-2,j-3...에 대해서는 그 차이
A[k]-A[i+1]가 M에 못미친다고 생각 할 수 있습니다.
왜냐하면 A[i]<=A[i+1] 이고, A[k]-A[i]<M 이었기 때문에
A[k]-A[i+1]<M이 성립하기 때문입니다.
예를 들어 M = 999 이고 A = [1,3,5,....199999] 이라고 합시다
A[0]=1이니까 A[500]=1001인 지점에서 차이가 최초로 M을 넘어갑니다
이제 A[1]=3에 대해 할때 A[2..499]까지는 비교해볼 필요없이
그 차이가 999에 못미친다는 것을 알 수 있습니다.
주어진 코드는 최악의 경우 O(N^2)인데요, 이 방법을 쓰면 O(N)시간에 풀수 있습니다.
11년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
canuyes
우선 질문에 앞서 문제의 내용과 출처를 밝힙니다.
http://www.acmicpc.net/problem/2230 입니다.
답을 내는 알고리즘은 작성했지만, 시간 초과가 뜨네요...
아래는 아주 나이브한 제 소스입니다.
문제에 명시되어 있는 난이도도 쉬움이고 해서 만만하게 보았는데
애를 먹고 있습니다.
설마하는 마음에 분할정복 기법도 적용해 보았는데,
왼쪽 수직선, 오른쪽 수직선, 양쪽을 가로지르는 수직선으로
문제를 분할할 때, 양쪽을 가로지르는 수직선을 구현하지 못했습니다.
이문제..어떻게 풀어야 하나요?ㅜ
11년 전