코딩테스트 : 카펫
최소 직사각형
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;
}
}
(더 나은 방법으로 구현하면 추후 추가하겠음)
댓글남기기