최대 1 분 소요

최소 직사각형

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

(사용언어 : java)

import java.util.Arrays;

public class Carpet {
    public static void main(String[] args) {
        Carpet c = new Carpet();
        int brown = 10, yellow = 2;
        System.out.println(Arrays.toString(c.solution(brown,yellow)));
    }

    public int[] solution(int brown, int yellow) {
        // 답은 (가로,세로)로 출력되므로 배열의 길이는 2
        int[] answer = new int[2];

        // 1. brown + yellow로 격자의 총수(total)를 구한다.
        int total = brown + yellow;

        // 2. total의 모든 약수 중, (몫, 제수)의 조합이 yellow = (몫-2)*(제수-2)인 조합을 찾아 반환한다.
        // total의 제곱근을 구한 후
        int squareRoot = (int)Math.sqrt(total);
        // 제곱근부터 1씩 감소시켜서 3까지 반복문을 돌리면서, total을 나누어 떨어지는 몫,제수 answer배열에 담는다.
        for(int i=squareRoot; i>=3; i--) {
            if(total%i==0) {
                if((i-2)*(total/i-2)==yellow) {
                    // 반복문을 돌며 i(제수)는 작아지므로 total/i(몫)는 커진다.
                    // 따라서 answer에 몫부터 저장해야 (가로,새로) 순서로 반환된다.
                    answer[0] = total/i;
                    answer[1] = i;
                }
            }
        }
        return answer;
    }
}

(더 나은 방법으로 구현하면 추후 추가하겠음)

댓글남기기