알고리즘, 자료구조/프로그래머스

[Javascript] 프로그래머스 카펫

jaee 2020. 6. 29. 20:05

문제

https://programmers.co.kr/learn/courses/30/lessons/42842

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

완전 탐색으로 분류된 문제지만 나는 완전 탐색으로 접근하진 않았다. 이 문제에서 생각해야 될 부분은 yello로 주어진 파라미터가 모두 카펫 안에 들어가야 된다는 것이다. 

 

풀이 과정

function solution(brown, yellow) {
    let answer = [];
    // row: 카펫의 가로길이, col: 카펫의 세로길이
    // row >= col 이므로, row 선언 동시에 최솟값을 할당하고, col은 이후 할당함
    let row = Math.sqrt(brown + yellow), col;
    
    // row가 정수이면 정사각형 카펫이므로, 동일한 값을 가로세로에 넣어 반환
    if(row % 1 === 0){
        return [row, row]
    // row가 정수가 아니면 정사각형 카펫이 아니므로(row는 col 이상)
    }else{
    	// i: 노란색(안쪽) 네모칸의 가로 길이
        for(let i = Math.ceil(row) - 2; i <= yellow; i++){
            // col: 노란색(안쪽) 네모칸의 세로 길이
            col = yellow / i;
            // 테두리는 한 줄 -> i + 2는 카펫 가로 길이, col + 2는 카펫 세로 길이가 된다
            if((i + 2) * (col + 2) === brown + yellow){
                return [i + 2, col + 2]
            }
        }        
    }
}

 

테스트케이스