본문 바로가기
JAVA/알고리즘

[ 완전탐색 Level2 ] 프로그래머스 카펫 - 자바 JAVA

by hak0205 2021. 7. 18.
반응형

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

 

- 문제 설명

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

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

- 입출력 예

brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

 

간단히 말해서 주어진 brown과 yellow를 가지고 행과 열의 수를 return하라는 것입니다.


카펫 자바 코드

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];

        int area = brown + yellow; //전체 갯수

        //행과 열의 갯수는 3이상이여야 합니다.
        for (int i = 3; i <= area; i++) {
            int col = i;             // 열
            int row = area / col;    // 행

            //행의 갯수가 3이하이면 Pass합니다.
            if(row<3){
                continue;
            }

            //행은 열보다 크거나 같아야 합니다.
            if(row>=col) {
                //문제의 규칙에 의하면 row-2*col-2 = yellow 입니다.
                if((row-2) * (col-2) == yellow) {
                    answer[0] = row;
                    answer[1] = col;
                    return answer;
                }
            }

        }
        return answer;
    }
    
}



정리

  • 문제풀이를 위한 규칙들을 정리해봤습니다. 아래와 같습니다. 코드에 주석도 같이 참조하시면 이해하시는데 도움이 됩니다.

1. 행과 열의 갯수가 3이상이여야만 합니다.

그 이유는 yellow갯수가 최소 1일 경우에 brown의 행의 열과 갯수가 3이상이여야 하기때문입니다.

 

2. brown갯수와 yellow갯수를 합치면 return 갯수의 곱과 같습니다.

예시 1번의 brwon(10) 갯수와 yellow(2) 갯수를 더하면 12입니다.

12가 되는 경우는 (1,12) (2,6) (3,4) (4,3) (6,2) (12,1) 인데

행과 열의 갯수는 3이상이여야 하므로 (4,3)(3,4)가 남습니다.

 

3. "카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다."

문제의 조건에 의하면 답은 (4,3) 입니다.

 

4.  return 값의 가로-2 * 세로-2 = yellow

문제의 예시들을 분석해보면 위의 조건이 성립되어야만 합니다.

 

 

감사합니다.

 
반응형

댓글