Algorithm/정올 알고리즘

정올_1214 히스토그램(자바) / 자료구조

미스터로즈 2021. 6. 29. 08:41

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.jungol;

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

public class jungol_1214 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		long[] H = new long[N+2];
		
		for (int i = 1; i < N+1; i++) {
			H[i]=Integer.parseInt(st.nextToken());
		}
		Long R, L,ans=(long) 0;
		for (int i = 1; i < N+1; i++) {
			R=(long) 0;
			L=(long) 0;
			//오른쪽 비교
			for (int j = i+1; j < H.length; j++) {
				if(H[i]>H[j]) {
					R=H[i] *(j-i);
					break;
				}
			}
			//왼쪽
			for (int j = i-1; j > 0; j--) {
				if(H[i]>H[j]) {
					 L=H[i]*(i-1-j);
					 break;
				}
			}
			ans = Math.max(ans, R+L);
		}
		System.out.println(ans);
	}
}

 

- 히스토그램은 가장 넓은 사각형의 크기를 구하는 문제입니다.

 

- 이 문제에 대한 해결 아이디어는 칸을 오른쪽으로 한칸씩 옮겨 가면서 다 확인하는 방법입니다.

 

- 이동했을때 그 칸에 해당하는 칸보다 좌 우 의 칸들이 더 작으면 크기를 더해줍니다.

 

- 오른쪽, 왼쪽의 크기를 더했을 때, 맥스 값을 구해주면 됩니다.