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);
}
}
๊ฒฐ๊ณผ
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 16922๋ฒ - ๋ก๋ง ์ซ์ ๋ง๋ค๊ธฐ (0) | 2022.08.11 |
---|---|
๋ฐฑ์ค 16926๋ฒ : ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 1 (0) | 2022.08.09 |
๋ฐฑ์ค 1158๋ฒ - ์์ธํธ์ค ๋ฌธ์ (0) | 2022.08.08 |
๋ฐฑ์ค 2630๋ฒ - ์์ข ์ด ๋ง๋ค๊ธฐ (0) | 2022.08.07 |
๋ฐฑ์ค 11660๋ฒ - ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (0) | 2022.08.06 |