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;
	}

}

 

문제를 잘 읽어보았다면 쉽게 풀 수 있었던 문제😁