Algorithm/Programmers
[Java] 완전탐색 - 최소 직사각형 (Lv1)
th42500
2022. 8. 7. 23:49
https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔ 입출력 예시
💡 포인트
1️⃣ 다양한 모양과 크기의 명함들을 모두 수납할 수 있는 지갑의 크기를 구해야 함
2️⃣ 명함은 가로로 눕혀서 수납하거나 세로로 수납할 수 있음
❓ 풀이과정
1️⃣ 지갑의 가로와 세로의 길이를 담을 변수 생성
2️⃣ sizes배열을 탐색하면서 각 배열의 0번째 값과 1번째 값을 비교
3️⃣ 더 짧은 쪽의 길이를 width와 비교, 더 긴 쪽의 길이를 height과 비교하여 각 변수 초기화
(더 긴 쪽의 길이를 height으로, 더 짧은 쪽의 길이를 width로 담아도 ⭕)
4️⃣ width*height 으로 지갑의 크기 구하기
❗ 결과
👉 테스트 통과
✔ 소스코드
public class Solution { // 최소 직사각형
public static void main(String[] args) {
int[][] sizes = { { 60, 50 }, { 30, 70 }, { 60, 30 }, { 80, 40 } };
// int[][] sizes = {{10, 7}, {12, 3}, {8, 15}, {14, 7}, {5, 15}};
// int[][] sizes = {{14, 4}, {19, 6}, {6, 16}, {18, 7}, {7, 11}};
System.out.println(solution(sizes));
}
private static int solution(int[][] sizes) {
int answer = 0;
// 1. 가로와 세로 변수 생성
int width = 0; // 작은 수 담기
int height = 0; // 큰 수 담기
// 2. sizes 배열 탐색
for (int i = 0; i < sizes.length; i++) {
// 3. 더 짧은 쪽의 길이를 width와 비교, 더 긴 쪽의 길이를 height과 비교하여 각 변수 초기화
if(sizes[i][0] <= sizes[i][1]) {
width = Math.max(width, sizes[i][0]);
height = Math.max(height, sizes[i][1]);
}else {
width = Math.max(width, sizes[i][1]);
height = Math.max(height, sizes[i][0]);
}
}
// 4. 지갑의 크기 구하기
answer = width * height;
return answer;
}
}
문제를 잘 읽어보았다면 쉽게 풀 수 있었던 문제😁