알고리즘🅰/프로그래머스

[프로그래머스] 카펫

개발조각 2023. 3. 6. 17:42
728x90
반응형

문제


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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이번문제는 완전탐색 문제입니다.

해결방안


yellow는 안에, brown은 yellow를 싸매고 있고, brown과 yellow의 개수를 알고 있습니다.

이 말을 brown은 yellow를 싸매는 모양이니 카펫의 크기는 yellow의 가로+2, 세로+2가 되겠죠?

 

brown 24, yellow 24를 예시를 들자면

yellow 24칸으로 아래와 같이 총 4가지의 사각형 모양을 만들 수 있습니다.

  • 1 * 24
  • 2 * 12
  • 3 * 8
  • 4 * 6

이 4가지의 사각형모양의 가로, 세로 각각에 +2를 하고 yellow칸만큼 빼면 아래와 같이 나오고

brown의 값을 찾을 수 있습니다.

  • (1+2) * (24+2) - 24 = 54
  • (2+2) * (12+2) - 24 = 72
  • (3+2) * (8+2) - 24 = 26
  • (4+2) * (6+2) - 24 = 24

brown 24, yellow 24일 경우에는

"카펫의 가로길이는 세로 길이와 같거나, 세로 길이보다 길다."라는 조건이 있으니

가로 8, 세로 6이 됩니다.

 

 

소스코드


function solution(brown, yellow) {
    var answer = [];
    
    for(let i=1; i<=Math.round(yellow/2); i++){
        if(!(yellow % i)){
            let j= yellow/i;
            let rest = (i+2)*(j+2)-yellow;
            
            if(rest === brown){
                answer = i>j ? [i+2, j+2] : [j+2, i+2]
                break;
            }
        }
    }
    return answer;
}

 

728x90
반응형