Algorithm/๋ฐฑ์ค€

2304๋ฒˆ - ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•

giraffe_ 2022. 8. 9. 00:16

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

 

2304๋ฒˆ: ์ฐฝ๊ณ  ๋‹ค๊ฐํ˜•

์ฒซ ์ค„์—๋Š” ๊ธฐ๋‘ฅ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1 ์ด์ƒ 1,000 ์ดํ•˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N ๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ค„์— ๊ฐ ๊ธฐ๋‘ฅ์˜ ์™ผ์ชฝ ๋ฉด์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ L๊ณผ ๋†’์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ H๊ฐ€ ํ•œ ๊ฐœ์˜

www.acmicpc.net

 

 

 

 

 

์ตœ๊ณ ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์˜์—ญ๊ณผ ์˜ค๋ฅธ์ชฝ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ ‘๊ทผํ•ด์„œ ํ’€์–ด์•ผ ํ•œ๋‹ค. ์ฒ˜์Œ์— ์ด ํ’€์ด๋ฒ•์ด ์ƒ๊ฐ์ด ์•ˆ๋‚ฌ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ ‘๊ทผ๋ฒ• ์ด์•ผ๊ธฐ๋ฅผ ๋“ฃ๊ณ  ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค!

 

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ฒ˜์Œ์—๋Š” ๊ธฐ๋‘ฅ class๋ฅผ ๋งŒ๋“ค์–ด์„œ L๊ณผ H๋ฅผ ๋„ฃ์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ArrayList์— ์ €์žฅํ•˜๊ณ , Comparator๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉํ•ด์„œ ์ •๋ ฌ๋„ ํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋А H๊ฐ’์„ ๊ฐ€์ง€๊ณ  list์˜ ์ธ๋ฑ์Šค๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ์•ˆ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์„œ ์ธ๋ฑ์Šค์™€ L๊ณผ H๋ฅผ ์ €์žฅํ•˜๋„๋ก ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  L๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

int[][] arr = new int[N][2];

 

๊ทผ๋ฐ ๋„“์ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์ด ๋ณต์žกํ–ˆ๋‹ค..!

 

 

 

 

 

 

ํ•˜์ง€๋งŒ ํ‹€๋ฆฌ๊ธธ ์—ฌ๋Ÿฌ ๋ฒˆ ๋์— ๊ฒจ์šฐ ํ’€์—ˆ๋‹ค. ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ ์šฉํ•ด๋ณด๋ฉฐ ์กฐ๊ธˆ์”ฉ ๊ณ ์ณค๋‹ค.

๊ฑฐ์˜ 3์‹œ๊ฐ„ ๋™์•ˆ ์—ด์‹ฌํžˆ ์‚ฝ์งˆํ–ˆ๋‹คใ…Žใ…Ž

 

 

 

 

 

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		int[][] arr = new int[N][2];
		
		int max = 0;
		int idx = 0;
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int L = Integer.parseInt(st.nextToken());
			int H = Integer.parseInt(st.nextToken());
			
			arr[i][0] = L;
			arr[i][1] = H;
		}
		
		//๊ตฌํ˜„
		Arrays.sort(arr, new Comparator<int[]>() { //l ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[0] - o2[0];
			}
		});
		
		//์ตœ๊ณ ์  ๊ตฌํ•˜๊ธฐ
		for(int i = 0; i < N; i++) {
			if(arr[i][1] > max) {
				max = arr[i][1];
				idx = i;
			}
		}
		
		int area = max; //๊ฐ€์šด๋ฐ ๋ฉด์ 
		
		//์™ผ์ชฝ ๋ฉด์ 
		int left_max = 0;
		int left_idx = 0;
		for(int i = 0; i <= idx; i++) {
			if(arr[i][1] >= left_max) {
				area += left_max * (arr[i][0] - arr[left_idx][0]); //์ด์ „ ์ตœ๊ณ  ๋†’์ด*์ด์ „ ์ขŒํ‘œ
				//๊ฐฑ์‹ 
				left_max = arr[i][1];
				left_idx = i;
			}
		}
		
		//์˜ค๋ฅธ์ชฝ ๋ฉด์ 
		int right_max = 0;
		int right_idx = N - 1;
		for(int i = N - 1; i >= idx; i--) {
			if(arr[i][1] >= right_max) {
				area += right_max * (arr[right_idx][0] - arr[i][0]); //์ด์ „ ์ตœ๊ณ  ๋†’์ด*์ด์ „ ์ขŒํ‘œ
				//๊ฐฑ์‹ 
				right_max = arr[i][1];
				right_idx = i;
			}
		}
		
		//์ถœ๋ ฅ
		System.out.println(area);
	}

}

 

 

 

 

 

๊ฒฐ๊ณผ