[JavaScript] 프로그래머스 - 카펫 (2단계)

배똥회장·2022년 7월 22일
0
post-thumbnail

📝 문제

프로그래머스 > 코딩테스트 연습 > 완전탐색 > 카펫


📝 답안

📌 작성 코드

function solution(brown, yellow) {
    for (let i = 1; i <= yellow / i; i++) {
        if (yellow % i != 0) continue;
        
        let num = yellow / i;
        if ((num + 2) * 2 + i * 2 == brown) return [num+2, i+2];
    }
    
    return [0, 0];
}

📌 코드 풀이

for (let i = 1; i <= yellow / i; i++) {
...
}

  • i는 노란 격자의 세로 길이이고, yellow / i 는 노란 격자의 가로 길이를 의미함

  • 가로 길이는 세로 길이보다 크거나 같아야 한다는 조건이 있기 때문에 i의 조건이 가로보다 작거나 같도록 설정함

if (yellow % i != 0) continue;

  • 만약 i로 딱 나누어 떨어지지 않으면 continue
  • 예를 들어 yellow가 9일 경우에는 2로 나누었을 때 0으로 나누어 떨어지지 않음. 그럼 사각형을 만들 수 없기 때문에 넘어가야함

if ((num + 2) 2 + i 2 == brown) return [num+2, i+2];

  • num+2는 갈색 블록의 가로 한 줄의 개수이고, 위 아래로 두르고 있기 때문에 * 2를 해줌
  • i는 그냥 2를 해주는데 이유는 둘레의 길이가 아니고 블록의 개수이기 때문임. 만약 둘레의 길이였다면 세로의 길이 역시 i + 2를 해주고 2를 해야함
  • 어쨋든 계산한 것이 갈색 격자 개수와 동일하다면 끝
profile
어쩌면 개발자

0개의 댓글