[etc] 완전탐색 카펫


카펫

문제 설명

img

고민

갈색이 10개 노랑색이 2개면 총 12개의 칸이 존재함…

그렇다면 나올 수 있는 사각형이 -> [1,12], [2,6], [3,4], [4,3], [6,1], [12,1]

가로의 길이가 세로의 길이보다 같거나 길다고 했으니깐 -> [4,3], [6,2], [12,1]

그리고 테두리에 세로가 2보다 작으면 노랭삭이 없으니깐 ->[4,3], [6,2]

그리고 갈색이랑 노랑색의 갯수를 확인하면

내풀이

function solution(brown, yellow) {
    var answer = [];
    var tot = brown + yellow;

    var cnt=0;

    var x;
    var y;
    while(true){
        cnt++;
        if( tot % cnt != 0 ) continue;
        x = tot / cnt;
        y = tot / x;
        if( x < y) continue;
        if( y < 2 ) continue;

        if( brown != (2*x) + (y-2)*2 ) continue;
        if( yellow != ((y-2) * x) - (y-2)*2 ) continue;
        break;

    };
    return [x,y]
}

나는 이렇게 무식하게 풀었지만

다른 멋진 풀이


function solution(brown, yellow) {
    const totalSpace = brown + yellow;
    
    for(let i = Math.floor(totalSpace / 2); i > 0; i--){
        if(totalSpace % i !== 0) continue;
        
        const width = i;
        const height = totalSpace / i;
        
        if((width - 2) * (height - 2) === yellow){
            return [width, height];
        }
    }
};






© 2017. by isme2n