📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
https://www.acmicpc.net/problem/2304
package datastructure;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class DataStructure2304 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
List<int[]> inputList = new LinkedList<>();
List<Integer> p_point = new ArrayList<>();
int h_point = 0;
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int L = Integer.parseInt(st.nextToken());
int H = Integer.parseInt(st.nextToken());
if (h_point < H) {
h_point = H;
p_point=new ArrayList<>();
p_point.add(L);
}else if(h_point==H){
p_point.add(L);
}
inputList.add(new int[]{L, H});
}
inputList.sort((e1, e2) -> {
int key1 = e1[0];
int key2 = e2[0];
return key1 - key2;
});
int cnt = 0;
int cnt2=0;
for (int[] ints : inputList) {
if (p_point.get(0) == ints[0]) {
break;
}
cnt++;
}
for (int[] ints : inputList) {
if (p_point.get(p_point.size()-1) == ints[0]) {
break;
}
cnt2++;
}
int pointFront = cnt;
int pointBack = cnt2;
int sum = 0;
int height_l = 0;
int place_l = 0;
for (int i = 0; i <= pointFront; i++) {
int[] input = inputList.get(i);
if (i == 0) {
height_l = input[1];
place_l = input[0];
} else if (input[1] > height_l) {
sum += (input[0] - place_l) * height_l;
height_l = input[1];
place_l = input[0];
}
}
int height_r = 0;
int place_r = 0;
for (int i = N - 1; i >= pointBack; i--) {
int[] input = inputList.get(i);
if (i == N - 1) {
height_r = input[1];
place_r = input[0];
} else if (input[1] > height_r) {
sum += Math.abs((input[0] - place_r) * height_r);
height_r = input[1];
place_r = input[0];
}
}
int width=Math.abs(p_point.get(0)- p_point.get(p_point.size()-1))+1;
sum += (h_point)*width;
System.out.println(sum);
}
}
문제 설명이 빈약해서 조금 해맸다.
나는 먼저 가장 높은 층의 기둥들을 list에 담아서 넣었고 높은 층 기둥의 첫번째 요소랑 마지막 요소를 비교 기준으로 삼아
for문을 돌려 -> ????? <- 이런식으로 알고리즘을 설계했다.
근데 코드가 너무 복잡한거 같아서 다른 사람들꺼 참고했는데 배열에 싹다 넣어서 알고리즘을 설계하는게 더 효율적인것을 보았다.
[백준 16928번] 뱀과 사다리 게임 (0) | 2024.12.23 |
---|---|
[백준 1967] 숨바꼭질 (0) | 2024.12.22 |
[백준 11501번] 주식 (0) | 2024.12.21 |
[백준 20006번] 랭킹전 대기열 (1) | 2024.12.20 |
[백준 22233번] 가희와 키워드 (0) | 2024.12.20 |