프로그래머스 Lv.2 : 카펫

zeroequaltwo·2022년 11월 30일
0

코딩테스트

목록 보기
58/69

문제

프로그래머스 문제

내 풀이

function solution(brown, yellow) {
    //yellow의 약수 조합
    let d = [[yellow,1]];
    for(var i=2; i<=Math.sqrt(yellow)+1; i++){
        if(yellow % i === 0){
            d.push([yellow/i, i]);
        }
    }
    
    //각 약수별로 brown의 둘레구하기
    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]
        }
    }
}
profile
나로 인해 0=2가 성립한다.

0개의 댓글