알고리즘
[PGS] 최소직사각형 (JAVA)
애용쓰
2023. 1. 6. 16:28
https://school.programmers.co.kr/learn/courses/30/lessons/86491
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
최대 최소만 구하면 되는 문제였는데 어렵게 생각해서 조금 꼬아풀었다.
class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int len = sizes.length;
int max = 0;
int max_2 = 0;
boolean flag = false; //false일 때는 가로에서 제일 큰 수, true일 때는 세로에서 제일 큰 수
//가로세로 합쳐서 제일 큰 수를 구한다.
for(int i=0;i<len;i++){
int[] tmp = sizes[i];
for(int j=0;j<tmp.length;j++){
if(max<tmp[j]){
max = tmp[j];
if(j==1) flag = true;
}
}
}
//그게 가로라면 tmp[0]<tmp[1]이면서 제일 큰 수보다 작거나 같으면 자리 바꾸기
if(!flag){
for(int i=0;i<len;i++){
int[] tmp = sizes[i];
if(tmp[0]<tmp[1]&&tmp[1]<=max){
sizes[i][1]=tmp[0];
sizes[i][0]=tmp[1];
}
}
for(int j=0;j<len;j++){
if(max_2<sizes[j][1]){
max_2 = sizes[j][1];
}
}
System.out.println(max+" "+max_2);
}
//그게 세로라면 tmp[0]>tmp[1]이면서 제일 큰 수보다 작거나 같으면 자리 바꾸기
else if(flag){
for(int i=0;i<len;i++){
int[] tmp = sizes[i];
if(tmp[0]>tmp[1]&&tmp[0]<=max){
sizes[i][0]=tmp[1];
sizes[i][1]=tmp[0];
}
}
for(int j=0;j<len;j++){
if(max_2<sizes[j][0]){
max_2 = sizes[j][0];
}
}
}
//끝까지 다 했으면 반대쪽에서 제일 큰 수 구해서 답 구하기
return max * max_2;
}
}
이렇게 간단하게 풀 수 있는 문제였는데 ...
class Solution {
public int solution(int[][] sizes) {
int length = 0, height = 0;
for (int[] card : sizes) {
length = Math.max(length, Math.max(card[0], card[1]));
height = Math.max(height, Math.min(card[0], card[1]));
}
int answer = length * height;
return answer;
}
}