Code Kata

강지원·2021년 10월 31일
0
post-thumbnail

1. 문제

인자인 height는 숫자로 이루어진 배열입니다.=
그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.

아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.

저 그래프에 물을 담는다고 생각하고,
물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.


(이건.. 가로 X 세로잖아 쉽네..?

라고 생각한 것 부터 잘못됐었다. 이건 현재까지 반절만 맞은 상태..)

2. 최종 코드


(어이없는 게 값은 나온다.)

3. 풀이 과정

빈 배열을 변수에 할당해 주어진 배열을 활용할 준비를 해준다.

세로값 밖에 없는데 가로값은?

주어진 배열을 보면 배열 안의 숫자는 세로값이다.
그리고 배열의 index를 이용해 가로값으로 사용할 수 있겠다.

면적을 알아내기 위한 준비

for문을 사용했다. 면적을 알기 위해선 그래프 2개가 필요하고
값이 각기 다른 모든 그래프를 순회하며 비교해봐야 하기 때문이다.
하나는 첫 번째 그래프부터 시작하도록 세팅,
다른 하나는 첫 번째 그래프보다 항상 다음 것을 비교할 수 있도록
세팅해줬다.

for(let i = 0; i < height.length; i++) {
  for(let j = 0; height.length; j++) {

  }
}

디테일한 면적을 알기 위해서는

주어진 배열과 for문의 인자를 활용해 if문을 사용해줬다.
두 그래프를 비교했을 때, 높은 그래프를 선택하면 면적값이
가장 큰 값을 구할 수 있지 않냐고 할 수 있지만, 그렇지 않다.

가장 높은 그래프를 선택했을 경우 ,물이 넘치기 때문이다.

그러므로 두 그래프를 비교했을 때, 덜 높은 그래프를 선택해야
물이 넘치지 않는 선에서 가장 큰 면적값을 얻을 수 있다.

if(height[i] > height[j]) {
  arr.push(height[j] * (j-i))
} else if(height[i] < height[j]) {
  arr.push(height[i] * (j-i))

가장 높은 값을 찾자

arr이라는 배열 안에는 if문과 for문으로 나온 결과값들이 존재한다.
하지만 순서대로 나온 것이 아니라 값들이 섞여있는데,
sort 메서드를 사용해 정렬 후 가장 높은 값을 추출한다면
그것이 바로 가장 넓은 면적값이다.



.
.
.


라며 끝나면 너무 좋았을 텐데 왜 테스트를 해봤을 땐
반절만 맞고 반절은 틀리다는 걸까.

여전히 모르겠다.

profile
'Why' better than 'Yes'

0개의 댓글

관련 채용 정보