항해 2주차가 시작되면서 프로그래밍 기초에대해 배우기 시작했다.
알고리즘을 풀다보니 꽉 막히게 되는 느낌이 들었다.
https://school.programmers.co.kr/learn/courses/30/lessons/86491?language=javascript
const sizes = [[60, 50],[30, 70],[60, 30],[80, 40]];
function solution() {
const maxWidth = Math.max(...sizes.flat());
const maxHeight = Math.min(...sizes.flat());
return maxWidth * maxHeight
처음에 이렇게 단순하게 생각을 해보았는데 이렇게 하면 maxHeight 값은 30이라는 단순히 배열에서 가장 작은 수가 나오게 된다. 배열을 돌다가 값이 큰값을 반환을 하고 a 보다 b가 크다면 b값을 반환하는건 어떻까 라는 생각을 해보고 코드를 적을려해봤지만 도저히 생각이 나지않아 구글링을 하여 다른 사람들은 어떻게 했는지 참고하였다.
sizes라는 배열에 map을 달아서 조건을 걸어 주어보았다.
const resize = sizes.map([w,h] => (w < h) ? [h,w] : [w,h] )
이 문제에서 중요했던 것은 '명함을 돌리면 지갑에 들어간다' 라는 부분이었다고 생각한다.
배열을 돌다가 w나 h중 둘중에 높은 수를 배열의 [0]에 배치를 한다
let maxWidth = 0;
let maxHeight = 0;
resize.forEach([w, h]) =>{
maxWidth = Math.max(maxWidth, w);
maxHeight = Math.max(maxHeight, h);
}
그리고 forEach를 사용해서 각 배열의 인덱스 중 최대값을 찾아주면 문제가 해결되었다.