프로그래머스 최소직사각형 해설, 문제풀이 과정, 알고리즘 최적화
프로그래머스 최소직사각형 문제 소개와 해설, 필자의 문제풀이 과정과 최적화된 알고리즘 문제풀이에 대해 소개하겠습니다. 아래 풀이 과정을 보면서 코딩에 있어서 유익한 인사이트를 얻길 바랍니다.
프로그래머스 최소직사각형 문제
명함 지갑을 디자인하는 회사에서는 다양한 명함을 수납할 수 있는 작고 효율적인 지갑을 만들고자 합니다. 각 명함의 가로 길이와 세로 길이가 주어질 때, 모든 명함을 수납할 수 있는 최소한의 지갑 크기를 찾아야 합니다.
입력 예시
명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 주어집니다.
예시:
[[60, 50], [30, 70], [60, 30], [80, 40]]
출력 예시
최소한의 지갑 크기를 반환합니다.
4000
필자의 문제풀이 시도
먼저, 명함의 최대 가로 길이와 최대 세로 길이를 구하는 방식으로 접근하려고 했습니다.
function solution(sizes) {
let answer = 0;
let width = 0;
let height = 0;
sizes.forEach((x) => {
if (x[0] > width) width = x[0];
if (x[1] > height) height = x[1];
});
console.log(width);
console.log(height);
return answer;
}
위 코드에서는 각 명함의 최대 가로 길이와 최대 세로 길이를 구했습니다. 하지만 이 정보를 이용하여 최적의 지갑 크기를 찾지 못했습니다.
알고리즘 최적화 코드
해당 문제의 인기있는 해결 방법은 다음과 같습니다.
function solution(sizes) {
let answer = 0;
let maxWidth = 0;
let maxHeight = 0;
sizes.forEach((card) => {
const [w, h] = card;
const maxSide = Math.max(w, h);
const minSide = Math.min(w, h);
if (maxSide > maxWidth) maxWidth = maxSide;
if (minSide > maxHeight) maxHeight = minSide;
});
answer = maxWidth * maxHeight;
return answer;
}
위 코드는 명함의 최대 가로 길이와 최대 세로 길이를 구하고, 이를 이용하여 최소한의 지갑 크기를 계산합니다. 이 알고리즘은 간결하면서도 효율적으로 동작하여 문제를 해결합니다.
풀이 해설
- 각 명함의 최대 가로와 세로 길이 구하기: 각 명함에 대해 최대 가로 길이와 최대 세로 길이를 구합니다.
- 최적의 지갑 크기 계산하기: 구한 최대 가로와 세로 길이를 이용하여 최소한의 지갑 크기를 계산합니다.
- 최종 결과 반환: 계산한 최소한의 지갑 크기를 반환합니다.
더나은 알고리즘을 위해
이 문제를 통해 명함 지갑의 최적 크기를 찾는 방법을 알아보았습니다. 최대 가로와 세로 길이를 구하고, 이를 이용하여 최소한의 지갑 크기를 계산하는 방식은 간결하면서도 효율적입니다. 이를 통해 어떻게하면 주어진 조건을 만족하는 최적의 해를 찾을 수 있는지에 대한 통찰력을 얻을 수 있었습니다.
▼ 아래 글도 읽어보세요! ▼
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 과일 장수 문제풀이 과정, 알고리즘 최적화 (1) | 2024.01.08 |
---|---|
프로그래머스 문자열 다루기 기본 해설, 인기 있는 문제풀이 (1) | 2023.12.29 |
프로그래머스 시저함수 문제 풀이, 해설, 알고리즘 코딩테스트 (0) | 2023.12.05 |
프로그래머스 부족한 금액 계산하기 해설, 문제풀이 과정 (0) | 2023.11.22 |
프로그래머스 내적 해설, 문제풀이 과정, 인기 있는 문제풀이 (1) | 2023.11.16 |