코딩 테스트/프로그래머스

프로그래머스 - 카펫 문제 (자바)

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

1. 갈색이 노란색을 감싸고 있어야하기 때문에 노란색은 사각형의 모습을 보여야합니다. 그래서 나누어지지 않는 경우 pass

2. 사각형인 경우 필요한 테두리를 계산 합니다. 

3. 구한 테두리의 값이 갈색과 같은 경우 큰값을 가로, 작은 값을 세로로 해서 리턴합니다(아래 코드에서 +2하는 이유는 노란색 사각형의 가로, 세로 + 2를 하면 테두리의 가로, 세로 이기 때문)

// 프로그래머스 카펫 문제
class Carpet {
    public int[] solution(int brown, int yellow) {
        int row = 0;
        int height = 0;
        for(int i = 1; i <= yellow; i++) {
            if(yellow % i != 0) continue;
            int side = yellow / i;
            int boundary = i * 2 + side * 2 + 4;
            if(boundary == brown) {
                row = Math.max(side, i) + 2;
                height = Math.min(side, i) + 2;
                break;
            }
        }
        return new int[]{row, height};
    }
}