개발 무지렁이

[문제풀이] Level2 카펫 본문

코딩 테스트/문제풀이

[문제풀이] Level2 카펫

Gaejirang-e 2023. 2. 23. 17:41

카펫


🪅 약수를 구하는 알고리즘을 짤 수 있느냐
🪅 예시를 보고 출력과 입력사이의 규칙을 찾을 수 있느냐

이 문제의 answer는 카펫의 가로격자수와 세로격자수를 배열로 출력하는 것이다.
즉, 가로격자수 x 세로격자수 = (카펫 전체 격자수)
'카펫 전체 격자수'는 갈색 격자수와 노란색 격자수를 합한 값이 되고
'카펫 전체 격자수'의 약수 중에서 가로격자수가 세로격자수보다 큰 약수들의 쌍을 구한다.(문제 전제)
그림을 보면 갈색격자는 모든테두리에 한줄씩 들어감으로 (가로격자수-2) * (세로격자수-2) = '노란색 격자수'가 된다.
위에서 구한 쌍 중에서 위의 조건을 만족하는 하나의 쌍을 답으로 출력한다.

import java.util.*;
class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int total = brown + yellow;
        List<Integer[]> divisorList = new ArrayList<>();

        // 약수끼리 묶어서 divisorList에 add
        for(int i = 1; i <= total; i++) {
            if(total % i == 0) {
                Integer arr[] = new Integer[2];
                arr[0] = i;
                arr[1] = (total/i);
                divisorList.add(arr);
            }
        }

        // 출력 test
        // for(int i = 0; i < divisorList.size(); i++) {
        //     Integer[] a = divisorList.get(i);    
        //     for(int j = 0; j < 2; j++) {
        //         System.out.print(a[j] + " ");
        //     }
        //     System.out.println();
        // }

        for(int i = 0; i < divisorList.size(); i++) {
            Integer[] a = divisorList.get(i);    
            if(a[0] >= a[1] && (a[0]-2)*(a[1]-2) == yellow) {
                answer[0] = a[0];
                answer[1] = a[1];
            }
        }
        return answer;
    }
}
Comments