프로그래머스 lv2 카펫

namkun·2022년 7월 24일
0

코딩테스트

목록 보기
27/79

문제 링크

카펫

풀이

        int[] answer = new int[2];

        int sum = brown + yellow;

        for (int i = 1; i <= yellow; i++) {
            // yellow의 약수임과 동시에, 각각 값에 + 2를 했을 때 그 넓이가 sum과 같다면.
            if (yellow % i == 0 && (yellow / i + 2) * (i + 2) == sum) { 
                answer[0] = Math.max(yellow / i + 2, i + 2);
                answer[1] = Math.min(yellow / i + 2, i + 2);
                return answer;
            }
        }

        return answer;

해설

  • 규칙성을 찾다보면 보이는게 하나 있다.
    • brown + yellow는 최종 사각형의 가로 * 세로 값과 동일
    • yellow로만 이루어진 사각형의 가로와 세로는, 최종 사각형의 가로와 세로에서 각각 -2를 해주면 된다.
    • yellow로만 이루어진 사각형의 넒이는 yellow의 값과 동일할 것이다.
  • 그렇기에 yellow값에서 약수를 구함과 동시에, 해당 약수에 각각 +2를 해줘서 곱했을 때, yellow + brown값과 같다면 그게 바로 정답
profile
개발하는 중국학과 사람

0개의 댓글