Programmers - 카펫

Doodream·2021년 3월 20일
0

코딩테스트

목록 보기
5/22
post-thumbnail

💻 카펫


❓ 문제

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

✔️ 코드

function solution(brown, yellow) {
    let totalBlock = brown + yellow;
    for (let a = 3; a < brown / 2 + 1; a++) {
        // a는 세로 b는 가로 
        if (totalBlock % a !== 0) {
            continue;
        }
        let b = ((brown - 2 * a + 4) / 2);
        if (b === totalBlock / a) {
            if (a >= b) {
                return [a, b];
            } else {
                return [b, a];
            }
        }
    }
}

❗️풀이과정

일단 갈색블럭과 노란색 블럭을 합친값은 total 블럭값이다.
가로와 세로길이를 곱한것도 total 블럭값이다.

갈색블럭 = 2( 세로 - 2 ) + 2( 가로 - 2)
노란블럭 = total - 갈색블럭 = 가로 * 세로 - 갈색블럭

따라서

한가지식을 세울수 있다.

가로 = ((갈색 - 2*세로 + 4) /2 );
세로는 3부터 시작가능하며 세로는 갈색의 반 이상이 될수가 없다.

세로를 3부터시작해서 위식을 만족하는 가로가 있을때

세로 * 가로가 total이라면 해당하는 값이 가로 세로가 가능하다.
문제에서 숫자가 큰순으로 출력하라고 했으므로 반환을 큰순으로 한다.

📄 배운점

  • 차분한 문제 분석이 중요하다.
profile
일상을 기록하는 삶을 사는 개발자 ✒️ #front_end 💻

0개의 댓글