💬 코드카타 2주차에서 구글링이나 다른 사람의 도움을 받지 않고 처음으로 짝궁과 고민하여 푼 첫 코드카타... 짝궁이랑 흥분감에 손 떨며 test 결과를 기다렸고... 결과는 성공‼✌🏻
문제
인자인 height는 숫자로 이루어진 배열입니다. 그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
가정
배열의 길이는 2이상입니다.
내 Flow
- height 배열의 요소는 높이를, 인덱스는 가로 길이를 나타내므로 더블 for문을 돌려 각각의 값을 비교한다.
- 같은 인덱스를 비교하지 않도록 if문을 설정한다.
- 비교했을 때 더 낮은 높이를 기준으로 가로길이와 곱해 면적을 구한다.
- 이 때 음수가 나와 0보다 큰 수가 나오도록 if문을 설정해서 새로운 배열로 만들어준다.
- 위 로직을 끝내고 새 배열에서 가장 큰 수(가장 넓은 면적의 값)을 return한다.
풀이
function getMaxArea(height) {
let area = 0;
let arr = [];
let max = 0;
for (let i=0; i<height.length; i++) {
for (let j=0; j<height.length; j++ ) {
if(i!=j){
if (height[i]<height[j]) {
area = (j-i)*height[i];
} else {
area = (j-i)*height[j];
}
if(area>0){
arr.push(area)
}
}
}
}
for(let k in arr){
if(max < arr[k]){
max = arr[k]
}
}
return max;
}
짝궁이 줄인 풀이
function getMaxArea(height) {
let area = 0;
let arr = [];
for (let i in height) {
for (let j in height) {
//(조건문) ? true : false
height[i]<height[j] ? area = (j-i)*height[i] : area = (j-i)*height[j];
//if(조건문) ? (실행문) : null 일 때, (조건문) && (실행문)
area > 0 && arr.push(area);
}
}
return Math.max(...arr);
}
'알고리즘 > 코드카타' 카테고리의 다른 글
Week3 - Day4 (Javascript) (0) | 2022.07.23 |
---|---|
Week3 - Day1 (Javascript) (0) | 2022.07.19 |
Week2 - Day4 (Javascript) (0) | 2022.07.15 |
Week2 - Day3 (Javascript) (0) | 2022.07.14 |
Week2 - Day2 (Javascript) (0) | 2022.07.14 |