[프로그래머스] 카펫(Level2) - 완전탐색 - JavaScript

조상래·2021년 6월 3일
0

프로그래머스

목록 보기
2/2

1. 문제해석

- brown은 테두리 1줄.
- 가로는 세로의 길이와 같거나 세로의 길이보다 길다. 즉, 세로의 길이는 가로의 길이를 넘지 못한다.

2. 풀이

- 가로 * 세로 = brown + yellow
- 가로, 세로의 길이는 최소 3이상 (중심에 yellow가 무조건 들어가는 조건을 충족)
- 반복문을 이용하여 [가로, 세로]의 모든 경우의 수를 구한다.
- 그러나 세로는 가로를 넘기지 못한다. 즉, Math.ceil((brown + yellow) / 3)까지만 구해도 충분하다.
- (가로 + 세로 - 2) * 2으로 테두리 격자의 개수를 구할 수 있다. 즉, brown의 개수와 같으면 만족하는 격자 비율이다.

function solution(brown, yellow) {
    const sum = brown + yellow;
    
    for (let h = 3; h <= Math.ceil(sum / 3); h += 1) {
        if (sum % h !== 0 || h < sum / h) continue;
        
        const v = sum / h;
        
        if ((h + v - 2) * 2 === brown) return [h, v];
    };
}
profile
Codestates Full IM26기 수료

0개의 댓글