최소직사각형 (레벨 1)
유형 : 완전탐색
https://school.programmers.co.kr/learn/courses/30/lessons/86491
function solution(sizes) {
var answer = 0;
let maxi = 0
let pair = []
sizes.map(e => {
let [x,y] = e
if(x>=y){
if(x > maxi){
maxi = x
pair = [x,y]
}
}
else {
if(y > maxi){
maxi = y
pair = [y,x]
}
}
})
sizes.map(e => {
let [x,y] = e
let bg = 0
let sm = 0
if(x>=y){
bg = x
sm = y
}
else{
bg = y
sm = x
}
let [px, py] = pair
if(py < sm){
pair[1] = sm
}
})
const [x,y] = pair
answer = x*y
return answer;
}
원래 풀이했던 방식의 생각의 흐름을 정리해보자.
1. 세로 가로 다 필요없고 최대값을 가지고 있는 pair를 구하자.
2. pair가 구해지면, 이미 최대값은 비교했으니까 큰 값은 필요없고, pair의 작은 값이 모든 size의 작은 값을 커버할 수 있는지만 확인하면 된다.
이게 핵심
완전탐색이라서 그런지, 코딩 공부를 오랜만에 해서 그런지, 내가 못해서 그런지 코드가 너무 지저분한 거 같아서 계속 의심이 들었다.
size의 x, y값 중에 어느 값이 더 큰 지 비교하고 다시 pair의 값과 비교하면서 if문이 중첩되어서 사용되는데,,, 더 개선할 필요가 있어 보였다.
아... 나는 애초에 최댓값을 구했는데... 왜 그랬지.
다른 사람의 코드를 보고 개선한 코드다. 핵심은 '정렬'에 있다.
function solution(sizes) {
var answer = 0;
let maxX = 0
let maxY = 0
sizes.map(e => {
let [x,y] = e.sort((a,b) => b-a)
maxX = maxX > x ? maxX : x;
maxY = maxY > y ? maxY : y;
})
answer = maxX * maxY
return answer;
}
후반 테스트를 보면 시간 개선이 안된 부분도 있어서 의아하다.
그러나 sort를 통해 코드 가독성은 증가된 건 확실하다.