알고리즘/프로그래머스

[프로그래머스] 카펫 for JAVA _ 완전 탐색 알고리즘

정석이 2022. 2. 13. 16:56

 

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

 

 

 

 

문제

 

 

 


 

x = 가로, y = 세로 크기라고 하면

 

 

1. (x - 2) * (y - 2) = yellow

2. x * y = brown + yellow

 

가 된다.

 

 

설명

 

 

 

 

코드

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 x = i; // 세로
            int y = area / x; // 가로
            
            if((x - 2) * (y - 2) == yellow){
                answer[0] = y; // 가로 먼저 출력
                answer[1] = x;
                return answer;
            }
        }
        return answer;
    }
}

 

 

 

아주 복잡하게 풀다가.... 아차 하고 다른 사람꺼 훔쳐봤다.

 

 

가로 ≥ 세로 길이 이므로 큰 수가 먼저 나와야하는데

 

 

 

x = i; 라고 함으로써 x인 가로의 크기가 더 작을 때 반복문이 끝나기 때문에

 

 

다른 조건은 더 안넣어줘도 된다~

 

 

 

 

 

 

 

다른 사람꺼도 봤는데 이게 깔끔한 풀이인듯... 다들 똑똑하구나~