코디잉
프로그래머스 - 최소직사각형 (JAVA) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근 방식) 완전탐색: 만들 수 있는 모든 명함의 크기 중 제일 큰 걸 찾으면 된다.
명함의 가로 중 제일 긴 거, 세로 중 제일 긴 거를 찾아서 곱하면 된다.
하지만 주의할 점은 명함을 회전시켜, 가로와 세로를 바꿀 수 있다는 점이다.
그래서, 명함의 긴 부분을 가로, 짧은 부분을 세로로 하기로 정했다.
가로 = 명함의 두 값 중 큰 값세로 = 명함의 두 값 중 작은 값
우리에게 주어진 sizes 배열을 돌면서, 이전 가로/세로와 비교하면서
새로 구한 가로/세로 값이 더 크다면 갱신시켜주면 된다.
→ 방향을 통일시켰으니, 명함의 가로 중 제일 긴 거, 세로 중 제일 긴 거를 찾아서 곱하면 된다.
코드는 매우 간단하다..
class Solution {
public int solution(int[][] sizes) {
// 모든 명함을 더 긴 부분이 가로가 되게 포갠다.
// 다른 명함과 가로, 세로 각각 비교하며 최댓값 구해서 넓이 구한다.
int width = 0;
int height = 0;
for (int i = 0; i < sizes.length; i++) {
width = Math.max(width, Math.max(sizes[i][0], sizes[i][1]));
height = Math.max(height, Math.min(sizes[i][0], sizes[i][1]));
}
return width * height;
}
}
'자료구조&알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 가장 가까운 같은 글자 (JAVA) (0) | 2023.11.13 |
---|---|
프로그래머스 - 미로탈출 (JAVA) (0) | 2023.10.13 |
프로그래머스 - 게임 맵 최단거리 (JAVA) (1) | 2023.09.25 |
프로그래머스 - 성격 유형 검사하기 (JAVA) (0) | 2023.09.16 |
프로그래머스 - 기능개발 (JAVA) (0) | 2023.09.16 |
Comments