프로그래머스 1단계
최소직사각형 문제를 풀어보자 🔳
최소직사각형!
map과 Push를 통해 정답을 도출해내는 방법입니다.
1. 가로 혹은 세로가 긴 명함이지만 명함은 회전 시킬 수 있기 때문에
2. 가로와 세로 중 더 큰 값을 가로에
3. 작은 값은 세로가 되도록 명함의 사이즈들을 변경합니다.
4. 가로 길이 중 max값 * 세로 길이 중 max값을 통해
5. 모든 명함이 들어갈 수 있는 최소 사이즈 반환
function solution(sizes) {
let arr = sizes.map(size => size[0] > size[1] ? [size[0], size[1]] : [size[1], size[0]]);
const width = [];
const height = [];
for (let i = 0; i < arr.length; i++) {
width.push(arr[i][0]);
height.push(arr[i][1]);
}
return Math.max(...width) * Math.max(...height);
}
최소직사각형 : 다른 사람 풀이
for/if 와 sort를 통한 방법입니다.
1. 명함들을 순회하면서 가로를 큰 쪽으로 돌린다. 즉, 명함이 세로가 더 길고 가로가 더 짧으면 눕혀서 가로 세로를 반대로 바꾸어 가로를 큰 쪽으로, 세로를 작은 쪽으로 돌린다.
2. 1번을 수행하고 나면, 모든 명함이 큰 쪽이 가로, 작은 쪽이 세로가 되어있다.
3. 그러면 최소한의 지갑을 만들기 위해서는 가로에서 제일 큰 값, 세로에서 제일 큰 값의 지갑을 만들어야 한다.
4. 정렬을 통해 원하는 부분을 추출하고 return 한다.
function solution(sizes) {
let answer = 1
// 가로의 길이를 제일 긴 변으로 설정 후 회전
for (let i = 0; i < sizes.length; i++) {
if (sizes[i][0] < sizes[i][1]) {
;[sizes[i][0], sizes[i][1]] = [sizes[i][1], sizes[i][0]]
}
}
// 가로의 최대값 * 세로의 최대값 = 최소 지갑
let x = sizes.sort((a, b) => b[0] - a[0])[0][0]
let y = sizes.sort((a, b) => b[1] - a[1])[0][1]
answer = x * y
return answer
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 1단계 : 이상한 문자 만들기 (1) | 2022.12.05 |
---|---|
프로그래머스 1단계 : K번째 수! (1) | 2022.12.05 |
프로그래머스 1단계 : 문자열 내 마음대로 정렬하기! (1) | 2022.12.05 |
프로그래머스 1단계 : 시저 암호! (1) | 2022.12.05 |
프로그래머스 1단계 : 이상한 문자 만들기 (1) | 2022.11.29 |
댓글