문제 분석

2차배열 정렬을 먼저 하고 진행했다. 진행되는 시간들의 합이 각 순간의 조건을 넘어가면 중단시키기 위해서다.

매순간 조건과의 차이가 가장 적은것이 결과값이 된다.

 

 

 

 

전체 소스

import java.util.*;
import java.io.*;

public class Main {

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		
		int repeat = Integer.parseInt(st.nextToken());
		int[][] array = new int[repeat][2];
	
	for(int i=0; i<repeat; i++) {
		st = new StringTokenizer(br.readLine()," ");
		array[i][0] = Integer.parseInt(st.nextToken());
		array[i][1] = Integer.parseInt(st.nextToken());
	}
	
	Arrays.sort(array,(o1,o2)->{
		if(o1[1]==o2[1]) {
			return Integer.compare(o1[0], o2[0]);
		}else {
			return Integer.compare(o1[1], o2[1]);
		}
	});
	int result = 999999999;
	int time = 0;
	boolean check = true;
	for(int i=0; i<repeat; i++) {
		time += array[i][0];
		if(time>array[i][1]) {
			result=-1;
			check = false;
			break;
		}else {
			if(result>array[i][1]-time) {
				result = array[i][1]-time;
			}
		}
	}
	
	
	if(result>array[repeat-1][1]-time) {
		result = array[repeat-1][1]-time;
	}
	
	System.out.println(result);

	}

}

 


문제

성실한 농부 존은 시간을 효율적으로 관리해야 한다는 걸 깨달았다. 그는 N개의 해야할 일에 (1<=N<=1000) 숫자를 매겼다. (우유를 짜고, 마굿간을 치우고, 담장을 고치는 등의)

존의 시간을 효율적으로 관리하기 위해, 그는 끝내야만 하는 일 목록을 만들었다. 완성될 때 필요한 시간을 T_i(1<=T_i<=1,000) 라고 하며, 끝내야하는 시간을 S_i(1<=S_i<=1,000,000) 이라 한다. 농부 존은 하루의 시작을 t = 0으로 정했다. 그리고 일 할 때는 그 일을 마칠 때 까지 그 일만 한다. 

존은 늦잠 자는 걸 좋아한다. 따라서 제 시간에 끝낼 수 있게 결정할 수 있는 한도에서 존이 가장 늦게 일어나도 되는 시간을 출력하라.

입력

첫 줄에는 일의 개수인 N을 받고

두 번째 줄부터 N+1줄까지 T_i와 S_i를 입력받는다. 

출력

존이 일을 할 수 있는 마지막 시간을 출력 하라. 존이 제시간에 일을 끝낼 수 없다면 -1 을 출력하라.

예제 입력 1 복사

4
3 5
8 14
5 20
1 16

예제 출력 1 복사

2

'알고리즘(BOJ) > Gold' 카테고리의 다른 글

백준 - Passport Control 16288  (0) 2023.03.03
백준 - 토너먼트 만들기 2262  (0) 2023.03.02
백준 - 행복 유치원 13164  (0) 2023.02.28
백준 - 과제 13904  (0) 2023.02.21
백준 - 크게 만들기 2812  (0) 2023.02.12
복사했습니다!