풀이)
물이 새는 위치를 입력받을 때 우선 정렬을 한 후, 길이를 탐색할 때 탐색할때 제일 처음 발견한 물이새는 곳을 기준으로 L-1만큼 증가한 위치를 찾으면 된다. 그 이후 이어서 탐색하여 또 물이 새는곳을 발견하면 테이프를 붙인다.
내 코드)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N; //물이 새는 곳의 개수
static int L; //테이프 한개의 길이
static int[] point;
static int count;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
L = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
point = new int[N];
for (int i = 0; i < N; i++) {
point[i] = Integer.parseInt(st.nextToken());
}
//------입력
// 물이 새는 곳의 위치를 순서대로 정렬
Arrays.sort(point);
for (int i = 0; i < N; i++) {
// end : 현재 point[i] 지점에서 한개의 테이프를 사용해서 어디까지 붙일 수 있는지를 저장하는 변수
int end = point[i]+L-1;
for (int j = i; j < N; j++) {
// point[i]를 시작지점으로 했을 때 point[j]가 end를 넘어가는지 판별
//즉 한개의 테이프로 덮을 수 있는 부분인지를 판별
if(point[j] > end) {
//넘어간다면 다음 테이프를 어디서부터 붙일건지 재설정
i = j-1;
//사용한 테이프 개수 증가
count++;
break;
}
}
}
//마지막에 사용한 테이프의 개수는 증가되지 않으니까 for문 나와서 증가
count++;
System.out.println(count);
}
}