[코테] 프로그래머스 완전탐색 카펫

홍인열·2022년 2월 18일
0
post-thumbnail
post-custom-banner

문제

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

풀이

요즘 코딩을하면서 최대한 모듈화를 시키려고 노력하고있다. 코드가 깔끔해지지고 가독성이 좋아지는거같다.

function solution(brown, yellow) {

    
    const max = brown/2 + 2 // 이부분을 정의하는데 많은 고민을했다. 아래 그림으로 설명을 해놓았다.
     
    const space = (min) => {
      const y = min //x >= y 라는 조건이 있기때문에 최소 길이를 y에 사용하였다.
      const x = max-y
      return {x,y, answer:(x-2)*(y-2) } // 바깥쪽이 브라운격자로 둘러 쌓여있기때문에 옐로우 격자가 들어갈 공간은 (x-2)*(y-2) 이다.
    }
    
    for (let i = 3; i <= max-3; i++){ // 각 변은 최소 3개의 블럭이 있어야 옐로우 블럭이 
      const result = space(i)
      if(result.answer === yellow) {
          return [result.x, result.y]
      }
    }
}

max = brown/2 + 2

아래 그림을 보면 쉽게 설명이 된다.
해당 그림은 brown이 10이다. 어떤 모양을 만들어도 x+y는 7(brown/2+2)가 나오게 되어있다.
그렇기 때문에 y를 최솟값이 3부터 시작하는 반복문을 통해 나머지 max값에서 y를뺀 값을 x에 할당하여 내부 넓이를 구하는 반복문을 짰다.

profile
함께 일하고싶은 개발자
post-custom-banner

0개의 댓글