개발자 '쑥말고인절미'
[프로그래머스] JS 최소직사각형 본문
문제
내 답안
function solution(sizes) {
let maxW = 0;
let maxH = 0;
for(let i=0; i<sizes.length; i++) {
if(sizes[i][0] < sizes[i][1]) {
let temp = sizes[i][0];
sizes[i].splice(0, 1, sizes[i][1]);
sizes[i].splice(1, 1, temp);
}
if(sizes[i][0] >= maxW) maxW = sizes[i][0];
if(sizes[i][1] >= maxH) maxH = sizes[i][1];
}
return maxW*maxH;
}
메모
이틀에 걸쳐 푼 문제이다. 실제 고민하고 푼 시간은 3-4시간정도..? 뭐 하여튼 이틀동안 풀었고, 아 영 어떻게 이걸 알고리즘화 해야하는지 감이 안잡혔다. 80과 50이 최소직사각형이 된다는건 머리로는 이해가 가지만 왜 그렇게 될 수 있는지 논리적으로 설명하라고 하면 절대 못하는.. 그런 상태였다. 오늘도 열심히 고민하는 와중에 문제를 다시 읽어보았고, 문제에 '명함들을 적절히 회전'이라는 말에 꽂혔다. 회전... 그래 w, h 값을 회전하면 뭔가 실마리가 잡히려나? 하고 내 맘대로 w, h값의 순서를 바꾸어보았다. w와 h 값을 비교해서 더 큰 값을 w에 넣는 방식으로 해서 배열 내부의 순서를 바꿔보니 실마리가 잡혔다. 아 이게 말로 하려니 애매하게 설명이 안되는데 아래 내가 고민하면서 필기했던 내용을 첨부했다...
w와 h값을 비교해서 큰 값들을 w에 배치한 뒤에 w 중에서도 가장 큰 값을 w값으로 결정하고, h 중에서 가장 큰 값을 h값으로 결정하니 해결할 수 있었다!
친구도 나처럼 노트에 적어보면서 해결했다. 친구 필기내용과 친구소스도 아래에 첨부했다. 나와 비슷한 루트로 해결했다ㅎㅎ
알고리즘도 알고리즘이지만 이걸 어떻게 해결할 수 있을지 감이 안잡히는게 너무 힘들었다. 다른 개발자분의 조언을 받아서 정답 안찾아보고 좀 더 고민해보았던건데 이렇게 해결할 수 있어서 뭔가 코테에 대한 아주 작은 답을 얻은 느낌이다.(조언 주셨던 개발자님께 감사드린다ㅎㅎ)
function solution(sizes) {
var answer = 0;
var tep = 0;
for(var i =0 ; i< sizes.length ; i++){
if(sizes[i][0] < sizes[i][1]){
tep = sizes[i][1];
sizes[i][1] = sizes[i][0];
sizes[i][0] = tep;
tep = 0;
}
}
var a1 = [];
var a2 = [];
for(var i=0; i< sizes.length ; i++){
a1[i] = sizes[i][0];
a2[i] = sizes[i][1];
}
answer = (Math.max.apply(null,a1)) * (Math.max.apply(null,a2))
return answer;
}
참고링크
https://www.daleseo.com/js-array-slice-splice/
자바스크립트 배열의 slice()와 splice() 함수
Engineering Blog by Dale Seo
www.daleseo.com
'STUDY > 코딩테스트' 카테고리의 다른 글
[프로그래머스] JS 두 개 뽑아서 더하기 (0) | 2022.09.28 |
---|---|
[프로그래머스] JS 숫자 문자열과 영단어 (0) | 2022.09.28 |
[프로그래머스] JS [1차] 비밀지도 (0) | 2022.09.21 |
[프로그래머스] JS 예산 (1) | 2022.09.19 |
[프로그래머스] JS 약수의 개수와 덧셈 (0) | 2022.09.14 |