최소직사각형
https://school.programmers.co.kr/learn/courses/30/lessons/86491
나의 풀이
function solution(sizes) {
let answer = 0;
let max = [];
let min = [];
for (const [a, b] of sizes){
// 지갑 길이 중 가장 큰 길이끼리 합치기
max.push(Math.max(...[a, b]))
// 지갑 길이 중 가장 작은 길이끼리 합치기
min.push(Math.min(...[a, b]))
}
// 큰 값 배열 중의 최대값과 작은 값 배열 중의 최소값을 곱하기
answer = Math.max(...max) * Math.max(...min)
return answer;
}
- 처음에 어떻게 풀이할 줄을 모르겠어서 조합을 쓰려다가 너무 복잡해지길래 코딩테스트 질문하기에서 힌트를 보았다.
- [a, b]로 되어있는 지갑의 배열에서 작은 값들만 min 배열로 합치고, 큰 값들은 max 배열로 합쳤다.
- 각 배열 안에서 최대값을 구해서 곱하면 답이 나온다.
다른 사람의 풀이
function solution(sizes) {
const [hor, ver] = sizes.reduce(([h, v], [a, b]) => [Math.max(h, Math.max(a, b)), Math.max(v, Math.min(a, b))], [0, 0])
return hor * ver;
}
- 다른 사람의 풀이 안에서 reduce로 깔끔하게 풀이한 문제가 있어서 가져와보았다.
- 해당 풀이도 나의 풀이와 같은 로직으로 풀이하였지만 reduce로 풀이하여 더 빠른 속도로 효율적이게 답을 반환했다.
- sizes 배열 안의 [h, v]를 누적 값으로 [a, b]를 현재 값으로 설정
- 누적 값인 h와 현재 값인 [a, b] 중 최대값을 서로 다시 Math.max로 비교한 최대값을 반환
- v도 마찬가지로 최대값을 반환
- sizes.reduce로 반환된 배열을 [hor, ver]로 구조분해할당하면 가로 중 최대값 hor과 세로 중 최대 값 ver이 따로 반환된다.
더보기
출처 및 참고자료
1. JavaScript 언어로 풀이된 문제 중 좋아요가 가장 많은 풀이, https://school.programmers.co.kr/learn/courses/30/lessons/86491/solution_groups?language=javascript
'JS > 알고리즘(코테)' 카테고리의 다른 글
프로그래머스 코딩테스트 LV.1 - 푸드 파이트 대회 (0) | 2023.07.11 |
---|---|
프로그래머스 코딩테스트 LV.1 - 비밀지도 (0) | 2023.07.06 |
프로그래머스 코딩테스트 LV. 1 - 삼총사 (0) | 2023.07.01 |
프로그래머스 코딩테스트 LV.0 - 왼쪽 오른쪽 (0) | 2023.06.07 |
프로그래머스 코딩테스트 LV.0 - 외계어 사전 (0) | 2023.06.05 |