본문 바로가기
코딩/백준-자바

[자바] 백준 1449번: 수리공 항승

by 철없는민물장어 2023. 1. 2.
728x90
반응형

https://www.acmicpc.net/problem/1449

 

1449번: 수리공 항승

첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나

www.acmicpc.net


테이프 하나로 붙일 수 있는 곳은 한번에 다 붙인다

라는 생각으로 풀었다

 

우선 구멍난 곳의 위치를 오름차순으로 정렬 해 둔다(그럼 앞에 있는 구멍부터 볼 수 있다)

앞에있는 구멍부터 테이프를 하나씩 뜯어서 구멍을 막을건데

뜯은 테이프로 같이 막을 수 있는 구멍은 같이 막자.

테이프의 시작위치는 구멍-0.5, 테이프의 끝나는 위치는 구멍-0.5+L이다.

 

테이프의 끝나는 위치보다 안에 있는 구멍은 굳이 새 테이프를 사용하지 않아도 같이 메꿀 수 있다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class P1449 {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int l = Integer.parseInt(st.nextToken());

		LinkedList<Integer> broken = new LinkedList<>();

		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			broken.add(Integer.parseInt(st.nextToken()));
		}

		Collections.sort(broken);

		int count = 0;
		while (!broken.isEmpty()) {
			count++;
			double tape_length = broken.pop() - 0.5 + l;
			while (!broken.isEmpty() && broken.peek() <= tape_length) {
				broken.pop();
			}
		}

		System.out.println(count);
	}

}

 

728x90
반응형

'코딩 > 백준-자바' 카테고리의 다른 글

[자바] 백준 1041번: 주사위  (0) 2023.01.02
[자바] 백준 10610번: 30  (0) 2023.01.02
[자바] 백준 2812번: 크게 만들기  (0) 2023.01.01
[자바] 1107번: 리모컨  (0) 2023.01.01
[자바] 백준 1092번: 배  (1) 2022.12.31

댓글