룬아님의 취중코딩

Codility 28번 MinPerimeterRectangle 본문

개발/알고리즘

Codility 28번 MinPerimeterRectangle

룬아님 2019. 9. 30. 10:30

MinPerimeterRectangle

 

An integer N is given, representing the area of some rectangle.

The area of a rectangle whose sides are of length A and B is A * B, and the perimeter is 2 * (A + B).

The goal is to find the minimal perimeter of any rectangle whose area equals N. The sides of this rectangle should be only integers.

For example, given integer N = 30, rectangles of area 30 are:

  • (1, 30), with a perimeter of 62,
  • (2, 15), with a perimeter of 34,
  • (3, 10), with a perimeter of 26,
  • (5, 6), with a perimeter of 22.

Write a function:

class Solution { public int solution(int N); }

that, given an integer N, returns the minimal perimeter of any rectangle whose area is exactly equal to N.

For example, given an integer N = 30, the function should return 22, as explained above.

Write an efficient algorithm for the following assumptions:

  • N is an integer within the range [1..1,000,000,000].

 

import java.util.*;

class Solution {
    public int solution(int N) {
        int cnt = 0;
        int min = Integer.MAX_VALUE;
        int sq = (int)Math.sqrt(N);
        for(int i=1; i<=sq; i++){
            if(N%i == 0){
                if((i + (N/i)) * 2 < min){
                    min =(i + (N/i)) * 2;
                }
            }
        }
        
        return min;
    }
}

https://app.codility.com/demo/results/training6CXAJ3-3T5/

반응형

'개발 > 알고리즘' 카테고리의 다른 글

Codility 31번 CountSemiprimes  (0) 2019.10.19
Codility 29번 Peaks  (0) 2019.09.30
Codility 26번 MaxDoubleSliceSum  (0) 2019.09.25
Codility 27번 CountFactors  (0) 2019.09.23
Codility 25번 MaxSliceSum  (0) 2019.09.22
Comments