문제
프로그래머스 문제
내 풀이
function solution(brown, yellow) {
let d = [[yellow,1]];
for(var i=2; i<=Math.sqrt(yellow)+1; i++){
if(yellow % i === 0){
d.push([yellow/i, i]);
}
}
for(var j=0; j<d.length; j++){
if(d[j][1] * 2 + (d[j][0] + 2) * 2 === brown) return [d[j][0]+2, d[j][1]+2];
}
}
개선점
- i는 세로, x는 가로일 때 한 변의 최솟값인 3부터 시작해서 세로값이 가로값과 같거나 작을 때까지 루프를 반복한다.
function solution(brown, red) {
var answer = [];
for (var i = 3; i <= (brown+red)/i; i++) {
var x = Math.floor((brown+red)/i);
if( (x-2)*(i-2)=== red) {
break;
}
}
return [x,i];
}
- 나처럼 for 두 번 안 쓰고 바로 계산한 사람 거. 난 왜 for를 두번 썼지..?
function solution(brown, red) {
var answer = [];
console.log(Math.floor(Math.sqrt(red)));
for(var i=0; i<=Math.floor(Math.sqrt(red)); i++){
if(red%i==0 && red/i*2 + i*2 + 4==brown){
console.log(red/i, i);
return red/i >= i ? [(red/i)+2, i+2] : [i+2, (red/i)+2]
}
}
}