문제를 보고 반복문을 사용하지 않는 방법이 생각나지 않았다...
그래서 반복문을 사용하더라도 간단하고, 수행시간이 빠른 코드를 작성하고 싶었다.
먼저,
sizes.map((array)=> array.sort((a, b)=> b - a)
로 width와 height 중 큰 값을 무조건
width에 오게 만들었다.
그 후, let w = size[0][0], h = size[0][1]
로 가로, 세로 길이를 저장한 후
반복문으로 순회해 가로, 세로에서 큰 값을 갱신했다.
function solution(sizes)
{
sizes = sizes.map((array)=> array.sort((a, b)=> b - a))
console.log(sizes)
let w = sizes[0][0], h = sizes[0][1]
for(let i = 1; i < sizes.length; i++)
{
w = sizes[i][0] > w ? sizes[i][0] : w;
h = sizes[i][1] > h ? sizes[i][1] : h;
}
return w * h;
}
테스트를 다 통과한 후, 다른 사람들의 코드를 분석한 결과
반복문 없이 문제를 해결할 수 있었다.
sizes.reduce()의 매개변수로 acc(누산값), cur(현재값)이 있는데
이때, acc와 cur에 배열 형식의 매개변수를 주는 방식이었다.
acc = [w, h], cur = [a, b], 초기 누산값 = [0, 0]
이렇게 acc와 cur을 주면,
a는 width가 되고, b는 height가 된다.
Math.max(w, Math.max(a,b)),
Math.max(h, Math.min(a,b))로
가로는 카드의 가로, 세로 중 큰 녀석을
현재 가장 큰 가로와 비교해
w(acc[0])에 저장하게 될 것이고,
세로는 카드의 가로, 세로 중 작은 녀석을
현재 가장 큰 세로와 비교해
h(acc[1])에 저장하게 될 것이다.
제출한 코드 :
function solution(sizes)
{
[wid, hei] = sizes.reduce(([w, h],[a, b])=> [Math.max(w, Math.max(a,b)), Math.max(h, Math.min(a,b))],[0,0])
return wid * hei
}
'문제 풀기 > JavaScripts' 카테고리의 다른 글
문제 46. 숫자 문자열과 영단어(Dictionary) (0) | 2024.07.29 |
---|---|
문제 45. 시저 암호(아스키코드 활용) (0) | 2024.07.29 |
문제 43. 크기가 작은 부분 문자열(substring 복습) (0) | 2024.07.25 |
문제 42. 삼총사 (0) | 2024.07.25 |
문제 41. 이상한 문자 만들기(toUpperCase, toLowerCase) (0) | 2024.07.25 |