응애개발자
article thumbnail
728x90

1. 문제

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

 

 

2. 접근 방법

  1. 왼쪽부터 오른쪽으로 탐색하며 원본 배열과 prefix배열을 비교하며 큰 수를 담아주었고
  2. 오른쪽부터 왼쪽으로 탐색하며 원보 배열과 suffix배열을 비교하며 큰 수를 담아주었다.
  3. prefix 배열, suffix 배열은 각 방향으로 진행하며 큰 수가 담겨져 있을 것이고 그 수중 작은 것드리 창고의 지붕이 된다.

 

3. 코드

<java />
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { private static StringBuilder sb; private static BufferedReader br; private static StringTokenizer st; private static int N; private static int[] arr,prefix,suffix; private static int answer; //입력 public static void input() throws Exception { br = new BufferedReader(new InputStreamReader(System.in)); sb = new StringBuilder(); N = Integer.parseInt(br.readLine()); arr = new int[1010]; prefix = new int[1010]; suffix = new int[1010]; for(int i = 0 ; i < N ; i++){ st = new StringTokenizer(br.readLine()); int L = Integer.parseInt(st.nextToken()); int H = Integer.parseInt(st.nextToken()); arr[L] = H; } } //실행 public static void process() { for(int i = 1 ; i < prefix.length ; i++){ prefix[i] = Math.max(prefix[i-1],arr[i]); } for(int i = suffix.length-2 ; i >= 0 ; i--){ suffix[i] = Math.max(suffix[i+1],arr[i]); } for(int i = 1 ; i < arr.length ; i++){ answer+=Math.min(prefix[i],suffix[i]); } System.out.println(answer); } public static void main(String[] args) throws Exception { input(); process(); } }
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!