카펫

공부한것 다 기록해·2023년 8월 2일
0

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

핵심 아이디어
(1) 갈색은 무조건 한 줄에 3개이상 존재해야만, 노란색 카펫이 사용될 수 있다.
(2) 노란색 카펫 수 + 갈색 카펫수의 약수들의 곱의 조합을 탐색해서, (가로,세로)로 잡은 경우 가로길이가 세로길이보다 더 긴 수를 찾아야 한다. (완전탐색)
(3) 노란색 카펫의 수를 잘 보면 (가로길이 - 2) * (세로길이 - 2)의 공식이 성립된다.

위 조건들을 만족하는 값을 완전탐색으로 찾으면 끝!

public class Solution {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(new Solution().solution(10,2)));
    }

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

        int num = brown + yellow;

        // 약수 찾기
        // 가로 > 세로
        //(1,12), (2,6), (3,4), (4,3)
        for (int i = 3; i < num; i++) { // 최소 3부터 시작
            int j = num / i; // j

            if(num%j==0 && num%i==0){ // 둘다 나눠떨어지는
                int row = Math.max(i,j); // 가로 값이 더 커야함
                int col = Math.min(i,j); // 세로 값이 더 작아야함

                if((row-2) * (col-2) == yellow){ // yellow 갯수와 같은 경우
                    answer[0] = row;
                    answer[1] = col;
                }
            }
        }

        return answer;
    }
}

0개의 댓글