프로그래머스 - 카펫

Lumi·2021년 12월 2일
0

알고리즘

목록 보기
48/59
post-thumbnail
function solution(brown, yellow) {
  let sum = brown + yellow;

  for (let i = 3; i <= brown; i++) {
    if (sum % i === 0) {
      let x = sum / i;
      if ((i - 2) * (x - 2) === yellow) {
        return [x, i];
      }
    }
  }
}

굉장히 굉장히 굉장히 간단하게 생각하면 해결할 수 있는 문제였다..ㅠㅠ

우리가 이 문제를 해결할떄 알고 기본적인 전제는 brown + yellow는 전체 배열의 갯수가 된다는 점이다.

나같은 경우에는 일단 yellow에 기준을 맞춰서 어떻게 풀어보려고 했다..ㅠㅠ

하지만 그냥 단순하게 최소 높이는 3이라는 점과 전체 배열의 갯수는 쉽게 구할수 있다는 점을 이용하면

손쉽게 문제 해결이 가능하다.

문제 로직 진행은 이와같다.

일단 높이를 기준으로 하나씩 증가해가면서 전체 값이 정확하게 나눠지는 경우를 찾는다.

이러한 상황에서는 여러가지 배열이 나올수가 있다.

그중에서 가로 -2 는 yellow의 가로 값, 세로 - 2는 yellow의 세로값이라는 점을 인지하여

그 값을 곱한것이 yellow와 같다는 점을 이용하는 것이다.

핵심은 전체 블럭의 갯수가 배열의 갯수와 같다는 점이다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글