본문 바로가기

코딩테스트

[프로그래머스] level2. 카펫 (javascript)

반응형

문제

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

나의 풀이

function solution(brown, yellow) {
    var answer = [];
    let total = brown+yellow
    let toplimit = parseInt(Math.sqrt(total))
    let lowlimit = 3;
    const arr = [];
    for(let i = lowlimit; i<=toplimit;i++){
        if(total%i ==0){
            arr.push(i)    
        }
    }
    for(let i = 0;i<arr.length;i++){
        let x = total/arr[i]
        let brow =(x*2)+(arr[i]*2)-4
        if (brow == brown){
            answer.push(x)
            answer.push(arr[i])
        }
    }
    return answer;
}

문제에서 1줄만 비우고 나머지가 yellow라 했으므로, 겉 1줄의 갯수 = brown 으로 생각하고 풀었다.

다른 이들의 정답

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];
}

여기는 1줄빼고 나머지가 yellow(red)라 생각하고 풀었다.
따로 배열을 만들지 않고 바로 계산하였다. 내꺼에 비해서 변수선언도 적고 더 깔끔한 것 같다.

반응형