카펫

Happhee·2022년 2월 5일
0

[ Lv2 ] programmers

목록 보기
17/32
post-thumbnail

📝 카펫

🖥 나의 JS 코드

Brute Force의 방법을 사용해 문제를 해결하였다
모든 경우의 수를 divisor함수를 통해 먼저 가져온 뒤, 문제 해결을 위한 경우의 수를 찾아나가는 방법으로 진행하였다

function divisor(size){
  //약수 담을 객체와 약수의 집합쌍을 담을 객체를 생성
    let arr = [], arr_group= [];
  // 해당 넓이의 약수를 구한다
    for(let i= 1 ; i <= size ; i++){
        if(size % i === 0)
            arr.push(i);
    }
  // 이를 반대로 전환시켜서
  // 약수 집합쌍에 [가로, 세로] 로 담을 수 있게 한다
    arr.reverse();
   
  // 약수 집합쌍을 생성 
    for(let i = 0 ; i < Math.floor(arr.length/2) ; i++){
        arr_group.push([arr[i], arr[arr.length-1-i]]);
    }
  // 약수의 개수가 홀수개 이면, 마지막의 약수 집합쌍은 같은 수 두개를 담아주어야 한다
    if(arr.length%2 === 1){
         arr_group.push([arr[Math.floor(arr.length/2)], arr[Math.floor(arr.length/2)]]);
    }
  
  // 최종적으로 만들어진 이중배열인 약수 집합쌍을 반환해준다
    return arr_group;
}

function solution(brown, yellow) {
    var answer = [];
  //격자의 크기는 곧 갈색과 노란색 격자의 수의 합과 같다
    let size = brown + yellow;
  // 격자 크기의 약수들의 집합쌍을 먼저 구해야 한다
    let divi = divisor(size);
    
  // 입출력의 예시처럼 brown이 10이면, 
  // 10 = (가로 길이 * 2 ) + ( 세로 길이 * 2 ) - 4 (중복 계산 격자) 가 되어야 한다
    for(const data of divi){
        if(data[0] *2 + data[1] *2 -4 === brown)
            return data;
    }
}
profile
즐기면서 정확하게 나아가는 웹프론트엔드 개발자 https://happhee-dev.tistory.com/ 로 이전하였습니다

0개의 댓글