Algorithm/Java

[프로그래머스 고득점 kit - 완전탐색] - 카펫

__hseong__ 2025. 4. 30. 00:22
728x90
반응형

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = {};
        
        int total = brown + yellow ;
        
        for(int height=3;height<=total/height;height++){
            int width = total / height;
            
            if(total%height==0){
                if((width-2)*(height-2)==yellow){
                    return new int[] {width,height};
                }
            }
        }
        return new int[0];
    }
}
  • 해당 문제의 요건을 잘 보면 무조건 가로>= 세로 관계이기 때문에 이를 잡고 조건문을 짜면되고, 잘 생각해보면 yellow 타일이 둘러쌓여있으려면 무조건 height가 3 이상이여야한다
  • 일단 전체 타일 갯수를 구한 후에, for 문을 height =3 부터 전체 갯수를 height로 나눈 것보다 작거나 같을 때 까지만 수행한다.
  • 그 이유는 가로 * 세로 하면 total 이 나오고, 기본적으로 세로가 가로보다 작거나 같아야 하기 때문이다.
  • 그리고 최종적으로 구했다면 어떤 형태이든 격자점은 빼야돼서 최종 갯수에서 각각 2씩 빼고 곱한 것을 return 하면 yellow의 갯수가 나온다!!
728x90
반응형