본문 바로가기

문제 풀이/Programmers

[프로그래머스] 카펫 (JAVA)

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 카펫

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

programmers.co.kr


[풀이]

1. brown + yellow를 전체 격자 개수에 넣어준다.

2. 세로의 개수와 가로의 개수를 구해준다.

3. 세로의 개수가 가로의 개수보다 많으면 넘어간다.

4. 가로와 세로 모두 노란색을 갈색으로 감싸기 위해서는 상하좌우 모두 1개씩 있어야 하므로 가로 -2, 세로 -2를 곱한 개수가 노란색의 총개수와 같은지 구한다.

5. 같다면 해당 가로와 세로의 개수를 담아주고 반복문을 종료한다.

6. 결과를 출력한다.

[접근]

1. 세로와 가로의 곱이 조건을 만족하는 경우를 구하면 되겠다고 생각하였다.

[코드]

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
 
        // 전체 격자 개수
        int area = brown + yellow;
 
        for (int i = 1; i <= area; i++) {
            int row = i; // 세로
            int col = area / row; // 가로
 
            // 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
            // 세로가 길면 돌아가기
            if (row > col)
                continue;
            
            // 가로와 세로 모두 노란색을 감싸기 위해서는
            // 상하좌우 각각 1개씩, 즉 세로 - 2, 가로 - 2가 노란색과 같아야한다.
            if ((row - 2) * (col - 2) == yellow) {
                answer[0] = col;
                answer[1] = row;
                return answer;
            }
        }
        
        return answer;
    }
}