본문 바로가기

Algorithm/문제풀이

Programmers - 카펫 / Javascript

굳이 값을 변수화 하지 않았다면 코드 라인은 더 짧아질 수 있었을 것 같지만 가독성 면에서는 좋지 않다고 생각해서 변수명을 달아주었다.

function solution(brown, yellow) {
    const area = brown + yellow;
    const result = [];
    //yellow가 될 수 있는 너비 * 높이 조합을 찾는다.
    for(let i = 0; i * i <= yellow; i++) { 
        if(yellow % i === 0) {
        	//width >= height이라는 조건이 있기 때문에 큰 수를 너비로, 작은 수를 높이로 본다.
            const yellowWidth = yellow / i;
            const yellowHeight = i;
            //갈색 격자의 너비는 노란격자 너비 + 2
            //갈색 격자이 높이는 노란격자 높이 + 2
            const brownWidth = yellowWidth + 2;
            const brownHeight = yellowHeight + 2;
            //위에서 구한 갈색격자 너비 * 갈색격자 높이가 주어진 전체 카펫의 면적과 일치하면 
            //정답이 되는 너비, 높이이다. 
            if(((yellow / i) + 2) * (i + 2) === area) {
                result.push(brownWidth, brownHeight);
                break;
            }
        }
    } 
    return result;
}