상세 컨텐츠

본문 제목

[Java] 연습문제5 - 배열 내 가장 넓은 면적 구하기

Java/제로베이스

by Gopythor 2023. 1. 8. 04:10

본문

728x90
반응형

Practice5

문제 설명

n개의 데이터가 height 배열에 주어졌다.
height 배열의 각각의 원소는 아래 그림과 같이 각 벽에 대한 높이를 의미한다.

이와 같이 높이 값들이 주어졌을 때,
이 중에서 어떤 두 벽을 고르면 가장 많은 물을 담을 수 있는지를 확인하고
그 때의 면적을 출력하세요.

입출력 예시

 

입력 출력
1, 8, 6, 2, 5, 4, 8, 3, 7 49
5, 3, 9, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 26

모범답안

public static int solution(int[] height) {
    int left = 0;
    int right = height.length-1;
    int maxArea = 0;
    
    while(left<right){
        int x = (right - left);
        int y = (height[left]>height[right]) ? height[right] : height[left];
        int curArea = x * y;
     maxArea = maxArea >curArea ? maxArea : curArea;
     
        if (height[left] < height[right]) {
            left++;
        } else {
            right--;
        }
    }
    return maxArea;
}
  • 투포인터로 작성되었다.
  • 처음 보는 개념의 문제라고 생각했지만, 잘 생각해보면 간단한 문제였다.

 

내 코드

public static int solution(int[] height) {
    int max = 0;
    for (int i = 0; i < height.length-1; i++) {
        for (int j = i+1; j < height.length; j++) {
           int min = Math.min(height[i],height[j]);
           int bulk = min * (j-i);
           if (bulk > max){
               max = bulk;
           }
        }
    }
    return max;
}
  • 직관적으로 작성한 코드
  • for문에서 i는 배열의 마지막 전까지
  • 다음 for문에서는 i+1에서 시작하여, 끝까지
  • min은 i와 j 중 최소값을 찾는다. 왜냐하면 면적은 최소값 기준으로 물을 최대한 담을 수 있기 때문이다.
  • bulk는 최소값에 j와 i의 차이 값을 곱한다.
  • max는 bulk의 최대값을 갖게 된다.
728x90
반응형

관련글 더보기

댓글 영역