React JS
in
개념
코드 카타
y축 값(높이)들을 담은 배열을 받아서 가장 넓은 면적이 나올 때 값 구하기
내 답안
function getMaxArea(height) {
let maxArea = 0;
for(let i = 0; i < height.length-1; i++) {
let frontBar = height[i];
for(let j = i+1; j < height.length; j++) {
let backBar = height[j];
let area = 0;
if(frontBar >= backBar) {
area = backBar*(j-i);
} else {
area = frontBar*(j-i);
}
if(area > maxArea) {
maxArea = area;
}
}
}
return maxArea;
}
- 풀이 방법 : 면적을 형성할 두 막대를 잡아서 면적을 구해보고, 가장 넓은 면적을 찾는다. 짧은 막대의 길이가 높이가 되고, 두 막대의 거리가 너비가 된다.
- 풀이
- y축 값들이 담긴 배열 height를 인자로 받는다.
- 가장 넓은 면적의 값을 담을 maxArea 변수를 선언하고 0을 할당하여 값을 초기화한다.
- 첫번째 막대가 될 height 배열의 요소를 구하기 위한 인덱스 변수 i값을 제공하는 for문을 시작한다. 두 막대 중 첫번째 막대는 마지막 막대일 수 없기 때문에 i가 가질 수 있는 최댓값은 height 배열의 길이보다 2 작은 값이다.
- height에서 i 인덱스 번째 요소(y축 값)를 첫번째 막대의 높이인 frontBar 변수에 할당한다.
- i에 대한 for문 안에서(첫번째 막대가 정해진 상태에서) 두번째 막대를 구하기 위해 i보다 최소 1만큼 크고, 최대 height 배열의 길이보다 1 작은 값을 갖는 인덱스 j 변수를 제공하는 for문을 시작한다.
- height에서 j 인덱스 번째 요소(y축 값)를 두번째 막대의 높이인 backBar 변수에 할당한다.
- 현재 frontBar와 backBar를 가지고 계산할 면적의 값을 저장할 area 변수를 선언하고 임시로 0을 할당해둔다.
- if문을 사용해서 frontBar와 backBar 중 작은 값에 j-i(두 막대 간의 거리)를 곱하여 area에 할당한다.
- area가 현재의 maxArea보다 크다면 maxArea에 재할당하여 더 큰 값이 저장되게 한다.
- for문이 끝난 후 최종적으로 저장된 maxArea를 반환한다.
'TIL' 카테고리의 다른 글
[TIL-135] 위코드 36일차: JS 코드카타 (0) | 2022.02.28 |
---|---|
[TIL-133~134] 위코드 34~5일차: React JS - Monster (0) | 2022.02.27 |
[TIL-131] 위코드 32일차: React JS - 위스타그램 마무리 / JS 코드카타 (0) | 2022.02.25 |
[TIL-130] 위코드 31일차: React JS - 서버와 통신하기 / JS 코드카타 (0) | 2022.02.23 |
[TIL-129] 위코드 30일차: React JS - 리팩토링 / JS 코드카타 (0) | 2022.02.22 |