자바로 백준 1499 풀기

hong030·2023년 9월 3일
0

풀이)
물이 새는 위치를 입력받을 때 우선 정렬을 한 후, 길이를 탐색할 때 탐색할때 제일 처음 발견한 물이새는 곳을 기준으로 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);
	}

}
profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글