끄적끄적 코딩
article thumbnail
728x90

N명의 구조요원이 있을 때 각각 일을 하는 시간이 주어집니다.
1명의 구조요원을 해고했을 때 처리 가능한 최대 시간을 구하는 문제입니다.

각각의 구조요원이 처리하는 시간을 배열에 저장해줍니다.
만약 30~40일 경우, time[30]++; time[31]++; ... time [39]++;

한명이라도 처리하는 곳이 있다면 해당 배열의 값은 1이상 입니다.
해당 배열의 값이 2이상이라면 2명이상이 처리하는 곳입니다.

모든 구조요원이 처리하는 시간을 확인해서 해당 배열의 값이 1이하인 곳을 카운트해줍니다.
카운트 한 값이 가장 작은 값을 출력해주었습니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int[] time = new int[1001];
		int[][] arr = new int[n][2];
		int total = 0;
		for(int i=0; i<n; ++i) {
			st = new StringTokenizer(br.readLine());
			arr[i][0] = Integer.parseInt(st.nextToken());
			arr[i][1] = Integer.parseInt(st.nextToken());
			for(int j=arr[i][0]; j<arr[i][1]; ++j) {
				if(time[j] == 0) {
					++total;
				}
				++time[j];
			}
		}
		int cnt = 987654321;
		for(int i=0; i<n; ++i) {
			int c = 0;
			for(int j=arr[i][0]; j<arr[i][1]; ++j) {
				if(time[j]<=1) {
					++c;
				}
			}
			cnt = Math.min(cnt, c);
		}
		
		bw.write(total - cnt + "");
		bw.close();
	}
}

'알고리즘' 카테고리의 다른 글

[Java] 백준 1987번 알파벳  (0) 2023.02.25
[Java] 백준 13023번 ABCDE  (0) 2023.02.25
[Java] 백준 17135번 캐슬 디펜스  (0) 2023.02.24
[Java] 백준 1759번 암호 만들기  (0) 2023.02.23
[Java] 백준 2644번 촌수계산  (0) 2023.02.23

검색 태그