ALGORITHM/PROGRAMMERS

[프로그래머스] 카펫

0298 2021. 7. 22. 09:19

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

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

2021-07-22


1
2
3
4
5
6
7
8
    public static int[] solution(int brown, int yellow) {
        for(int i = 1; i <= Math.sqrt(yellow); i++) {
            if((yellow % i == 0&& (brown == ((yellow/i+i)*2 + 4))) {
                return new int[]{yellow/i+2, i+2};
            }
        }
        return null;
    }
cs

 

#문제풀이

약수를 구한다고 생각을 했다. 

예를 들어, 노란색이 24개인 경우,

(1, 24), (2, 12), (3, 8), (4, 6) 이렇게 4가지 경우의 수가 나올 수 있다. (가로 >= 세로 이므로 반대의 경우 고려 하지 않는다.)

 

(1,24) 인 경우, 가로는 24이고, 세로는 1 인데 그렇게 되면 갈색 격자가 24*2 + 1*2 + 4 가 필요하여 주어진 brown값과 맞지 않는다.

(4,6)인 경우, 가로는 6이고, 세로는 4이니깐 갈색 격자는 6*2 + 4*2 + 4 == 24로 주어진 갈색 격자 값과 일치한다.

 

이러한 방식으로 노란색의 가로, 세로 값으로 갈색 격자가 몇개인지 찾으면 된다.