본문 바로가기
알고리즘/프로그래머스

[프로그래머스] (완전탐색) 카펫

by 오이가지아빠 2021. 3. 27.

갈색격자의 수가 brown, 노란격자의 수가 yellow 일때 카펫의 면적은 brown + yellow 이고

면적의 약수가 카펫의 가로,세로 길이가 된다.

 

brown :10, yellow : 2 => 면적 : 12, 카펫가로 세로 후보군은 [1,12], [2,6], [3,4], [4,3], [6,2], [12, 1]

카펫에 노란격자는 무조건 1이상이고, 가로가 세로보다 길거나 같다는 조건이 있으므로 가능한 후보군은

[4,3] 하나뿐이다. (최소 가로/세로 길이는 3)

 

전체 면적까지 루프를 역순으로 돌리고, (가로-2) * (세로-2) = 노란격자의 수가 나오는 경우의 수를 찾는 문제

 

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int size = brown + yellow;
        for (int i = (int) Math.ceil(size/2); i >= 3; i--) {
            int yak1 = i;
            int yak2 = size/i;
            if((yak1-2) * (yak2-2) == yellow) {
                answer[0] = yak1;
                answer[1] = yak2;
                break;
            }
        }
        return answer;
    }
}

 

출처: 프로그래머스 코딩 테스트 연습, 
https://programmers.co.kr/learn/challenges
반응형

댓글