-
JavaScript:: 그래프의 최대 넓이 값 구하기알고리즘 2020. 7. 17. 13:18
[JavaScript] 그래프의 최대 넓이 값 구하기
문제
'인자'인 height는 숫자로 이루어진 배열입니다.
그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.저 그래프에 물을 담는다고 생각하고,
물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.- 가정 : 배열의 길이는 2이상입니다.
해결 과정
우리가 해결해야 할 문제는 아래와 같다.
- 각 배열의 요소를 돌아가며 다른 배열의 요소의 값과 함께 넓이를 구한다.
- 넓이를 구할 때 두 수를 비교하는데, 최소값을 통해 높이 값을 구한다.
- 두 요소의 인덱스 값을 비교해 가로값을 구한다.
- 모든 경우의 수로 담긴 넓이의 값을 비교하여 큰 수부터 내림차순으로 배열을 정리한다.
- 배열 중 가장 큰 수를 반환한다.
해결 과정의 코드는 아래와 같다.
1번 과정
function getMaxArea(height) { let value = []; for (let i=0; i < height.length; i++) { for(let z=height.length-1; z>i; z--) { // 이중 for문을 이용해 두 수를 비교할 수 있도록 한다. } } }
첫번 째 for문은 배열의 첫자리 수 부터,
두번 쨰 for문은 배열의 뒷자리 수 부터 이동하여
(배열의 뒷자리 수 부터 이동하던, 배열의 앞자리 수 부터 이동하던 상관은 없다)배열에서 구해질 수 있는 넓이의 모든 경우의 수 값을 구한다.
2, 3번 과정
function getMaxArea(height) { let value = []; for (let i=0; i < height.length; i++) { for(let z=height.length-1; z>i; z--) { value.push(Math.min(height[i], height[z]) * (z-i)) } } }
Math.min(height[i], height[z])
가 두 수 중의 최소값을 구해 나온 총 넓이의 높이 값이다.(z - i)
는 두 수의 인덱스 값을 비교하여 넓이의 가로 길이를 구하기 위함이다.이렇게 구해진 넓이의 세로, 가로 길이를 서로 곱하여 나온 넓이의 값을 value라는 배열에 저장한다.
4번 과정
function getMaxArea(height) { let value = []; for (let i=0; i < height.length; i++) { for(let z=height.length-1; z>i; z--) { value.push(Math.min(height[i], height[z]) * (z-i)) } } value.sort(function(a,b) { return b - a }) console.log(value); } getMaxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]); // [49, 40, 36, 24, 20, 18, 16, 15, 15, 14, 12, 12, 10, 10, 10, 9, 8, 8, 7, 6, 6, 6, 6, 5, 4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1]
이중 for문을 이용해 구한 각각의 경우의 수들을 담은 value라는 이름을 가진 변수 배열에 sort 함수를 이용하여 각 값들을 큰 수 부터 내림차순으로 정렬한다.
( sort 함수의 매개변수인 a,b는 각각 a는 뒷자리, b는 앞자리이며 음수가 return 될 경우, 각 인자의 위치가 바뀐다.)
5번 과정
function getMaxArea(height) { let value = []; for (let i=0; i < height.length; i++) { for(let z=height.length-1; z>i; z--) { value.push(Math.min(height[i], height[z]) * (z-i)) } } value.sort(function(a,b) { return b - a }) return value.shift(); } getMaxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]); // 49
shift 메소드를 이용해 내림차순으로 정의된 value 변수의 배열에서 가장 첫번째 값, 즉 가장 넓이가 큰 값을 반환한다.
문제 해결 완료👏🏻
'알고리즘' 카테고리의 다른 글
Javascript:: 가장 자주 등장한 숫자를 k개수만큼 return (0) 2020.07.16 JavaScript:: 정수 뒤집어 return 하기 (0) 2020.07.07 JavaScript :: twoSum 함수 (0) 2020.07.06